【问题标题】:Adding to the $PATH environment variable in a PHP script在 PHP 脚本中添加到 $PATH 环境变量
【发布时间】:2011-10-17 14:41:21
【问题描述】:

我有一个 PHP 脚本,它使用 wget 下载一些图像。但是,wget 是使用 Homebrew 安装的,因此运行 PHP 脚本的用户无法使用它。当我运行exec('echo $PATH') 时,我没有得到包含wget/usr/local/bin 目录。如何将/usr/local/bin 添加到环境路径中,以便PHP 脚本可以找到wget

更新:我忘了提到我无法指定确切位置的原因是因为该位置可能会因运行此脚本的机器而异。

解决方案:

这就是我最终的结果:

//help PHP find wget since it may be in /usr/local/bin
putenv('PATH=' . getenv('PATH') . PATH_SEPARATOR . '/usr/local/bin');
if (exec('which wget') == null) {
    throw new Exception('Could not find wget, so image could not be downloaded.');
}

//now we know wget is available, so download the image
exec('wget ...');

【问题讨论】:

    标签: php path environment-variables


    【解决方案1】:

    按优先顺序:

    1. 您可以在调用子进程时简单地指定完整路径/usr/local/bin/wget。这可能是最简单、最好的方法。
    2. 您可以使用proc_open 代替exec,这样您就可以将环境变量作为参数传递。
    3. 您可以使用putenv 更改当前环境(将由子进程继承)。

    【讨论】:

    • 抱歉,putenv 仅对当前请求有效吗?新请求不会有新添加的路径,对吗?
    • PHP documentation 表示它在当前请求之后无法生存。
    【解决方案2】:

    PHP 有一个名为 $_ENV 的神奇全局变量,它是一个包含所有环境变量的数组(在 PHP 脚本运行的进程上下文中,例如您的 Web 服务器)。

    http://php.net/manual/en/reserved.variables.environment.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 2011-11-26
      • 2023-03-29
      • 2019-09-04
      • 2013-08-25
      • 2019-12-06
      • 2017-02-21
      • 2021-06-02
      相关资源
      最近更新 更多