2

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

使用phpinfo(),当我将 PHP 作为 apache 模块 ( ) 运行时,我无法看到这些 Windows 环境变量mod_php

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

基本上,是否有一个根本原因getenv(),为什么 php 在运行时mod_fcgid应该只检索某些变量(我猜可能是那些最初随操作系统安装的变量),而忽略其他应用程序随后设置的那些变量?

我已经搜索谷歌近 48 小时,但没有发现任何有形的东西。任何人都可以请善意地提供见解。

谢谢你。

4

1 回答 1

0

回顾一下这个问题。在我决定将mod_fcgidPHP 作为 apache 模块运行的默认设置更改为之前,我没有任何问题(在 WAMP 下)。在此之后,getenv()调用我为大多数 Windows 环境变量返回的 PHP 代码NULL(即使它们在我切换回原始环境变量后就可以正常工作mod_php)。

经过几天的磕磕绊绊,这就是为我解决这个问题的方法。PassEnv为您希望传递给 PHP 的每个缺失变量添加:

PassEnv Variable1
PassEnv Variable2
PassEnv Variable3

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

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

于 2015-03-22T16:01:09.053 回答