我最近将生产系统上的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个小时,并没有发现任何有形的东西。任何人都可以请他们帮助提供见解。
谢谢。
答案 0 :(得分:0)
回顾一下这个问题。我没有问题(在WAMP下),直到我决定从默认运行PHP作为apache模块更改为mod_fcgid
。在此之后,对于大多数Windows环境变量,我的PHP代码中调用的getenv()
返回NULL
(即使它在我切换回原始mod_php
时它们完美地工作)。
在经历了几天的磕磕绊绊之后,这就解决了这个问题。为您希望传递给PHP的每个缺失变量添加PassEnv
:
PassEnv Variable1
PassEnv Variable2
PassEnv Variable3
然后,当然,重新启动Apache服务器。
仍然很奇怪这种任意差异应该存在,并且在Apache或fcgid文档中都很难被捕获!