diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 3517b514420d..b4a723a54681 100755 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -743,7 +743,7 @@ PHP_FUNCTION(getenv) if (!str) { array_init(return_value); - php_import_environment_variables(return_value); + php_load_environment_variables(return_value); return; } diff --git a/main/php_variables.c b/main/php_variables.c index 3d7d904a47d7..730c6d9458dd 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -28,7 +28,9 @@ /* for systems that need to override reading of environment variables */ void _php_import_environment_variables(zval *array_ptr); +void _php_load_environment_variables(zval *array_ptr); PHPAPI void (*php_import_environment_variables)(zval *array_ptr) = _php_import_environment_variables; +PHPAPI void (*php_load_environment_variables)(zval *array_ptr) = _php_load_environment_variables; PHPAPI void php_register_variable(const char *var, const char *strval, zval *track_vars_array) { @@ -632,6 +634,11 @@ void _php_import_environment_variables(zval *array_ptr) tsrm_env_unlock(); } +void _php_load_environment_variables(zval *array_ptr) +{ + php_import_environment_variables(array_ptr); +} + bool php_std_auto_global_callback(char *name, uint32_t name_len) { zend_printf("%s\n", name); diff --git a/main/php_variables.h b/main/php_variables.h index 52d26aa5064a..598de70f0359 100644 --- a/main/php_variables.h +++ b/main/php_variables.h @@ -32,6 +32,7 @@ BEGIN_EXTERN_C() void php_startup_auto_globals(void); extern PHPAPI void (*php_import_environment_variables)(zval *array_ptr); +extern PHPAPI void (*php_load_environment_variables)(zval *array_ptr); PHPAPI void php_register_variable(const char *var, const char *val, zval *track_vars_array); /* binary-safe version */ PHPAPI void php_register_variable_safe(const char *var, const char *val, size_t val_len, zval *track_vars_array); diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 94a9ca6c7e60..a4b11627789e 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -516,7 +516,21 @@ static void cgi_php_load_env_var(const char *var, unsigned int var_len, char *va } /* }}} */ -void cgi_php_import_environment_variables(zval *array_ptr) /* {{{ */ +static void cgi_php_load_env_var_unfilterd(const char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg) +{ + zval *array_ptr = (zval *) arg; + php_register_variable_safe(var, val, val_len, array_ptr); +} + +static void cgi_php_load_environment_variables(zval *array_ptr) +{ + php_php_import_environment_variables(array_ptr); + + fcgi_request *request = (fcgi_request*) SG(server_context); + fcgi_loadenv(request, cgi_php_load_env_var_unfilterd, array_ptr); +} + +static void cgi_php_import_environment_variables(zval *array_ptr) { fcgi_request *request = NULL; @@ -542,7 +556,6 @@ void cgi_php_import_environment_variables(zval *array_ptr) /* {{{ */ request = (fcgi_request*) SG(server_context); fcgi_loadenv(request, cgi_php_load_env_var, array_ptr); } -/* }}} */ static void sapi_cgi_register_variables(zval *track_vars_array) /* {{{ */ { @@ -1840,6 +1853,7 @@ consult the installation file that came with this distribution, or visit \n\ /* make php call us to get _ENV vars */ php_php_import_environment_variables = php_import_environment_variables; php_import_environment_variables = cgi_php_import_environment_variables; + php_load_environment_variables = cgi_php_load_environment_variables; /* library is already initialized, now init our request */ request = fpm_init_request(fcgi_fd); diff --git a/sapi/fpm/tests/bug75712-getenv-server-vars.phpt b/sapi/fpm/tests/bug75712-getenv-server-vars.phpt new file mode 100644 index 000000000000..49d9535a6b03 --- /dev/null +++ b/sapi/fpm/tests/bug75712-getenv-server-vars.phpt @@ -0,0 +1,62 @@ +--TEST-- +FPM: bug75712 - getenv should not read from $_ENV and $_SERVER +--SKIPIF-- + +--FILE-- +start(); +$tester->expectLogStartNotices(); +$tester->request()->expectBody([ + 'bool(false)', + 'bool(true)', + 'string(4) "test"', + 'bool(false)', + 'bool(false)', + 'string(2) "dt"', + 'string(2) "dt"', +]); +$tester->terminate(); +$tester->close(); + +?> +Done +--EXPECT-- +Done +--CLEAN-- +