summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/php_variables.c14
-rwxr-xr-xtests/basic/bug29971.phpt15
2 files changed, 27 insertions, 2 deletions
diff --git a/main/php_variables.c b/main/php_variables.c
index 4feac0fbab..0283944615 100644
--- a/main/php_variables.c
+++ b/main/php_variables.c
@@ -705,7 +705,15 @@ int php_hash_environment(TSRMLS_D)
static zend_bool php_auto_globals_create_server(char *name, uint name_len TSRMLS_DC)
{
- php_register_server_variables(TSRMLS_C);
+ if (strchr(PG(variables_order),'S') || strchr(PG(variables_order),'s')) {
+ php_register_server_variables(TSRMLS_C);
+ } else {
+ zval *server_vars=NULL;
+ ALLOC_ZVAL(server_vars);
+ array_init(server_vars);
+ INIT_PZVAL(server_vars);
+ PG(http_globals)[TRACK_VARS_SERVER] = server_vars;
+ }
zend_hash_update(&EG(symbol_table), name, name_len + 1, &PG(http_globals)[TRACK_VARS_SERVER], sizeof(zval *), NULL);
PG(http_globals)[TRACK_VARS_SERVER]->refcount++;
@@ -726,7 +734,9 @@ static zend_bool php_auto_globals_create_env(char *name, uint name_len TSRMLS_DC
INIT_PZVAL(env_vars);
PG(http_globals)[TRACK_VARS_ENV] = env_vars;
- php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC);
+ if (strchr(PG(variables_order),'E') || strchr(PG(variables_order),'e')) {
+ php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC);
+ }
zend_hash_update(&EG(symbol_table), name, name_len + 1, &PG(http_globals)[TRACK_VARS_ENV], sizeof(zval *), NULL);
PG(http_globals)[TRACK_VARS_ENV]->refcount++;
diff --git a/tests/basic/bug29971.phpt b/tests/basic/bug29971.phpt
new file mode 100755
index 0000000000..d4b654bdb1
--- /dev/null
+++ b/tests/basic/bug29971.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #29971 (variables_order behaviour)
+--INI--
+variables_order=GPC
+--FILE--
+<?php
+var_dump($_ENV,$_SERVER);
+var_dump(ini_get("variables_order"));
+?>
+--EXPECT--
+array(0) {
+}
+array(0) {
+}
+string(3) "GPC"