Bug #74986 [Com]: Environment variables set via putenv are not accessible via parse_ini_*
| From: | alan at aondra dot com | Date: | Tue, 25 Jul 2017 22:11:04 +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-210333@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:
"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.
Previous Comments:
------------------------------------------------------------------------
[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