Bug #74986 [Com]: Environment variables set via putenv are not accessible via parse_ini_*

From: Date: Tue, 25 Jul 2017 22:12:02 +0000
Subject: Bug #74986 [Com]: Environment variables set via putenv are not accessible via parse_ini_*
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-210334@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=74986&edit=1 ID: 74986 Comment by: alan at aondra dot com Reported by: alan at aondra dot com Summary: Environment variables set via putenv are not accessible via parse_ini_* Status: Open Type: Bug Package: *General Issues Operating System: Windows 7 Professional SP1 x64 PHP Version: 7.1.7 Block user comment: N Private report: N New Comment: Thanks to requinix, I'll give that a shot. Previous Comments: ------------------------------------------------------------------------ [2017-07-25 22:11:03] alan at aondra dot com "We didn't write it in the description, so it doesn't happen" could not be any more disingenuous of a response. Fix and document it, or remove it entirely. Don't think me while saying it's likely to be a wontfix; it's just as disingenuous as the documentation comment. ------------------------------------------------------------------------ [2017-07-25 22:02:49] requinix@php.net Not documented with parse_ini_file/string, but it's the same parser used for php.ini and support for environment variables is documented there. http://php.net/manual/en/configuration.file.php#example-36 It is a handy feature to have in userland. I know I've used it myself. I think the problem is because of how Apache deals with environment variables - by taking a copy at startup - combined with how PHP's environment variable getting and setting works in Windows. putenv() probably works fine by setting the variable at the process level (SetEnvironmentVariable), but reading it back from the SAPI won't work because Apache is still using the old list it had. I suspect apache_setenv() instead of putenv() will work, and using $walk_to_top=true sounds like it might address the potential multithreading problem too. ------------------------------------------------------------------------ [2017-07-25 21:02:07] ab@php.net Thanks for the report. This feature is not documented, why is it expected behavior? Furthermore, it is not thread safe and therefore not portable. I'd tend to say it's a won't fix. Thanks. ------------------------------------------------------------------------ [2017-07-25 16:29:38] alan at aondra dot com Actual results appear on a second Windows-based server running PHP 7.1.6 on Windows 7 Professional SP1 x64. Expected results appear on Amazon EC2 instance running Amazon Linux AMI release 2017.03 with PHP 7.0.16 and Apache HTTPD 2.4.25. ------------------------------------------------------------------------ [2017-07-25 11:04:25] alan at aondra dot com Description: ------------ --- From manual page: http://www.php.net/function.parse-ini-file --- In Windows environment, putenv does not make environment variables accessible to either of the functions parse_ini_string or parse_ini_file. Sample on test site 3v4l.org works as expected, but fails in local Windows development environment. Apache HTTPD 2.4.27 PHP 7.1.7 x64 TS Test script: --------------- <?php putenv('FOO=bar'); var_dump(getenv('FOO')); $str = <<<'EOF' BAZ=${FOO} EOF; $ini = parse_ini_string($str); var_dump($ini); Expected result: ---------------- string(3) "bar" array(1) { ["BAZ"]=> string(3) "bar" } Actual result: -------------- string(3) "bar" array(1) { ["BAZ"]=> string(0) "" } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=74986&edit=1

« previous php.bugs (#210334) next »