PHP getenv()在Windows中只返回几个参数

时间:2015-03-16 08:36:16

标签: php apache mod-fcgid getenv

我最近将生产系统上的Web服务器环境更改为Apache2.4 / mod_fcgid 2.3.9。在重新启动Apache时,我意识到我的脚本取决于PHP getenv()被破坏了。进一步检查,我可以使用getenv("PATH")检索Windows PATH,但不能检索我的应用程序安装设置的其他几个变量,甚至是其他一些变量(例如PSModulePath)。

使用phpinfo()时,我无法看到这些Windows env变量,就像我将PHP作为apache模块(mod_php)运行时所使用的那样。

我在Serverfault(https://serverfault.com/questions/675736/apache-2-4-with-mod-fcgid-getenv-not-working-in-php)上列出了httpd.conf的其他详细信息,此问题的详细版本尚未得到答复。

基本上,有一个根本原因导致php getenv()mod_fcgid上运行时,应该只检索某些变量(可能是最初安装在操作系统中的那些变量,我猜),但是忽略了随后由其他申请设定的那些?

我现在已经搜索了谷歌近48个小时,并没有发现任何有形的东西。任何人都可以请他们帮助提供见解。

谢谢。

1 个答案:

答案 0 :(得分:0)

回顾一下这个问题。我没有问题(在WAMP下),直到我决定从默认运行PHP作为apache模块更改为mod_fcgid。在此之后,对于大多数Windows环境变量,我的PHP代码中调用的getenv()返回NULL(即使它在我切换回原始mod_php时它们完美地工作)。

在经历了几天的磕磕绊绊之后,这就解决了这个问题。为您希望传递给PHP的每个缺失变量添加PassEnv

PassEnv Variable1
PassEnv Variable2
PassEnv Variable3

然后,当然,重新启动Apache服务器。

仍然很奇怪这种任意差异应该存在,并且在Apache或fcgid文档中都很难被捕获!