Почему переменная среды, установленная SetEnv в apache httpd.conf, не может быть передана в php?
Я установил переменную среды в httpd.conf:
SetEnv http_proxy "http://localhost:3128"
Но я не могу получить эту переменную в php, используя:
<?php
echo getenv("http_proxy");
phpinfo();
print_r($_ENV);
getenv
возвращает пустой иprint_r($_ENV)
показывает следующее содержимое:
Array ( [LANG] => C [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin [NOTIFY_SOCKET] => /run/systemd/notify )
Интересно, что переменная среды показана в разделе «Среда Apache» документа.phpinfo
выход.
(моя система — apache 2.4/php 5.6/CentOS7)
1 ответ
PHP 5.6 не поддерживается уже 3 года . Обновитесь до актуальной версии прямо сейчас! Затем измените следующее:
ИспользоватьSetEnv HTTP_PROXY "http://localhost:3128"
- переменные среды чувствительны к регистру.
Использоватьgetenv(varname: "HTTP_PROXY", local_only: true)
для запроса переменной из среды сервера.
Если вы явно не укажете получение только локальных переменных, вместо этого вы будете получать результаты от fastcgi, поэтому для имени переменной, начинающегося сHTTP_
вместо этого это может привести к опасной путанице небезопасного кода с заголовками и молча отбрасывается . Отказ от поведения SAPI описан в описании функции getenv() :
Если PHP работает в SAPI, таком как Fast CGI, эта функция всегда будет возвращать значение переменной среды, установленной SAPI, даже если putenv() использовался для установки локальной переменной среды с тем же именем. Используйте параметр local_only, чтобы вернуть значение локально установленных переменных среды.