Почему переменная среды, установленная 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, чтобы вернуть значение локально установленных переменных среды.

Другие вопросы по тегам