为什么我的$ _ENV为空?

我正在运行,Apache/2.2.11 (Win32) PHP/5.3.0并且在.htaccess文件中执行了以下操作:


SetEnv FOO bar

如果我$_ENV在PHP文件中打印出变量,则会得到一个空数组。为什么我的环境变量没有出现在这里?为什么首先是空的?


我确实找到了变量,但是它出现在$_SERVER变量中。由于某种原因,它出现了两次。为什么是这样?


[REDIRECT_FOO] => bar

[FOO] => bar

看来我可以使用来获得它getenv('FOO'),所以也许我应该只使用它。但是我仍然对造成这种情况的原因有些好奇。这是Windows问题吗?还是发生了什么事?


肥皂起泡泡
浏览 521回答 5
5回答

慕仙森

$_ENV 变量是从运行PHP的环境中导入的,并且取决于您的设置(操作系统,服务器,PHP是作为Apache模块运行还是在FastCGI下运行,等等),这可能会有很大不同。在Windows上以标准Apache + mod_php安装的IIRC中,更改变量的唯一方法$_ENV是更改Windows的环境变量(请参阅参考资料)。在Windows上处理PHP扩展时,这可能很重要,因为其中的某些扩展(例如php_ldap:)只能通过on上的环境vars进行配置$_ENV。

慕村拓拓栽

我也遇到了类似问题

weixin_慕少1111222

好像是一个是服务端的变量一个是其他地方的用nginx遇到过类似的

四季花海

REDIRECT_*如果您使用的是RewriteRules,则会显示变量。在我的服务器上,它们也是如此。它可能与在FastCGI下运行有关。如果与suexec结合使用,最有可能清理整个环境的var池。PassEnv特别是可能需要进行其他配置才能恢复它们。至于为什么getenv()为您工作,我不知道。但是所有现象都是特定于您的服务器和php配置的。询问服务器故障,他们应该知道。
打开App,查看更多内容
随时随地看视频慕课网APP