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