【问题标题】:php exec() not refreshing Path environment variablephp exec()不刷新路径环境变量
【发布时间】:2015-08-31 18:06:48
【问题描述】:

我升级了我的 java jvm,他们改变了在 PATH 环境变量中存储 jvm 位置的方式。

它坚持“C:\ProgramData\Oracle\Java\javapath;”在 Path 变量的开头。

现在,问题是当我执行 exec("java blah blah blah") 时,php 找不到新路径。我明白了

"'java' is not recognized as an internal or external command, operable program or batch file."

仅当我执行完整路径时才有效:

exec("c:\My\Path\To\Java\java blah blah blah")

当我执行 phpInfo(INFO_ENVIRONMENT) 时,它会显示更改前的 Path 变量。它是否被缓存在某个地方?我在其他线程中读到重新启动服务器或重新启动 Apache 会有所帮助,但它似乎不起作用。我尝试了多次重启。

var_dump($_SERVER['PATH']), var_dump(getenv('PATH')) 似乎显示了新路径。为什么phpInfo中的值会不同?某处是否有 Path 变量的单独副本?

我有一个在 Windows Vista 上测试过的开发环境,我没有这个问题。当我在 windows 2008 环境中测试它时,我遇到了问题。

我试图避免对路径进行硬编码。

【问题讨论】:

    标签: java php variables path environment


    【解决方案1】:

    在 exec 语句之前,您可以像这样将路径添加到路径变量

    putenv('PATH='.getenv('PATH').'path to java here');  
    

    【讨论】:

    • 但是,我只是避免在一个地方硬编码它,而是在另一个地方硬编码它。无论 Jvm 是否更新,我都试图让我的代码正常工作。并且在更新期间更改了 jvm 的路径。我想要更优雅的解决方案,而不是在单独的服务器上单独配置它。如果它只读取 Path 环境变量,那就太好了。任何想法为什么它似乎存储了 Path 变量的 2 个副本?
    • 我唯一能想到的是你有不止一个 php.ini 有一个用于你正在使用的 php 版本和一个 Apache 在 phpinfo 中加载的你应该看到的东西像加载的配置文件一样,确保它正在加载您进行更改的正确配置文件
    • 起初,我尝试了您的建议。 putenv('PATH='.getenv('PATH').'这里的java路径');但是后来,我注意到 phpInfo 显示了新路径以及我刚刚附加的路径。然后,我将其更改为: putenv('PATH='.getenv('PATH'));现在,phpInfo() 显示新路径。所以,我想,也许,它只是被卡住了。也许它只是缓存在某个地方,需要更新?我删除了那行代码,phpInfo() 似乎恢复到旧的 Path 副本。添加那行代码对我有用。
    猜你喜欢
    • 2023-03-29
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多