【问题标题】:PHP getenv() returning only few parameters in WindowsPHP getenv() 在 Windows 中只返回几个参数
【发布时间】:2015-03-16 08:36:16
【问题描述】:

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

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

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

基本上,php getenv()mod_fcgid 上运行时应该只检索某些变量(我猜可能是最初随操作系统安装的变量),但忽略那些随后由其他应用程序?

我已经在 Google 上搜索了将近 48 小时,但没有发现任何有形的东西。任何人都可以帮助提供见解。

谢谢。

【问题讨论】:

  • 我相信绝大多数 PHP 安装都是基于某种 Unix/Linux 的,所以你可能很难得到答案。对不起。是否有理由必须直接在 Windows 环境中运行 PHP?你不能在虚拟机中运行它吗?
  • @GordonM。感谢您的光临。我确实理解 PHP 和 Unix 在基因上更接近。问题是:我从来没有真正在 Unix 上做过任何认真的工作,而且,在这个特定的模块更改之前,这个特殊的问题从未浮出水面。再次:如果我在 Unix 内部的 Windows VM 中运行 PHP,它还不是“Windows”吗?

标签: php apache mod-fcgid getenv


【解决方案1】:

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

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

PassEnv Variable1
PassEnv Variable2
PassEnv Variable3

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

这种任意的差异应该存在,而且在 Apache 或 fcgid 文档中都很难捕捉到,这仍然很奇怪!

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 2015-12-09
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    相关资源
    最近更新 更多