为什么apache httpd.conf中通过SetEnv设置的环境变量不能传递给php?

为什么apache httpd.conf中通过SetEnv设置的环境变量不能传递给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 获取结果,因此对于以此开头的 varnameHTTP_可以危险地混淆不安全的代码带有标题并且默默丢弃。选择退出 SAPI 行为是getenv() 函数描述中记录

如果 PHP 在 SAPI(如 Fast CGI)中运行,则此函数将始终返回由 SAPI 设置的环境变量的值,即使已使用 putenv() 设置了同名的本地环境变量。使用 local_only 参数返回本地设置的环境变量的值。

相关内容