Почему переменная окружения, установленная SetEnv в apache httpd.conf, не может быть передана в php?

Почему переменная окружения, установленная SetEnv в apache httpd.conf, не может быть передана в php?

Я установил переменную окружения в httpd.conf:

SetEnv http_proxy "http://localhost:3128"

Но я не могу получить эту переменную в php с помощью getenv:

<?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

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

Связанный контент