Редактировать: насколько я могу судить, мой вопрос связан с дефектом в PHP. Я скопировал этот вопрос в средство отслеживания ошибок PHP здесь: https://bugs.php.net/bug.php?id=74143 и запланируйте внедрение исправления.
Функция putenv устанавливает значение переменной среды. Согласно руководству, putenv возвращает true в случае успеха и false в случае неудачи.
Однако я обнаружил, что функция putenv иногда возвращает значение true без обновления переменной среды для текущего сеанса.
Чтобы воспроизвести эту проблему, установите переменную среды на веб-сервере с помощью PHP FPM с помощью директивы fastcgi_param. Это невероятно полезно, так как позволяет устанавливать переменные среды изолированно от других хостов на том же сервере.
Пример nginx.conf:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param TESTVAR_ENV old-value;
include fastcgi_params;
}
Пример test.php:
var_dump(getenv("TESTVAR_ENV"));
var_dump(putenv("TESTVAR_ENV=new-value"));
var_dump(getenv("TESTVAR_ENV"));
Вывод test.php:
string(12) "old-value"
bool(true)
string(12) "old-value"
Как вы видете:
- существующее значение успешно читается getenv,
- функция putenv возвращает true, указывая на успех,
- новое значение на самом деле не установлено, что невероятно сбивает с толку.
Я неправильно понимаю, какова цель функции putenv? На странице руководства setenv отсутствует какая-либо документация? Как использовать putenv() для обновления существующей переменной среды?
putenv("TESTVAR_ENV")
следует очистить значение или, может быть, вместо этого попробовать использовать$_SERVER
? - person miken32   schedule 22.02.2017$_SERVER
работает, как и ожидалось. - person miken32   schedule 22.02.2017Returns TRUE on success or FALSE on failure.
Я не могу убедить себя, что не изменить значение существующей переменной - это что-то иное, чем сбой... что делает это дефектом php. - person user1180316   schedule 22.02.2017