如何在不指定确切位置的情况下运行脚本内的命令?

如何在不指定确切位置的情况下运行脚本内的命令?

我有一个用于下载一些图像的 PHP 脚本wget。它看起来像这样:

exec('wget -O saveImage.png http://location.of.image');

当我在另一台机器上运行我的脚本时,它可以工作。但是,当我在本地运行它时,它不起作用。我认为这与我的安装方式有关wget。在本地,我运行的是 Mac OS X 10.6 Snow Leopard,并wget使用自制。因此,当我以我的身份运行which wget的位置时(这是 Homebrew Cellar 的符号链接)。我已确定运行该脚本的用户名为。我知道该脚本归该组所有,但我认为该用户不属于该组(但我不知道如何检查)。无论如何,我认为该用户无权执行该命令和/或找不到该脚本。我该怎么办?wget/usr/local/bin/wgetdaemonwgetstaffdaemondaemon

更新:因此,当我指定确切位置时,我就能运行该脚本:

exec('/usr/local/bin/wget ...etc');

这让我认为这不是权限问题,而是“无法找到 wget”问题。我认为我无法指定确切的位置,因为在运行此脚本的不同机器上位置不同。那么我应该怎么做才能解决这个问题?

解决方案:

通过添加/usr/local/bin到环境$PATH变量,PHP 能够找到 wget。以下是我在 PHP 中执行的操作:

//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 ...');

答案1

答案只有一半...

确保 wget 位于您运行脚本的用户的默认 PATH 环境变量中(在每台机器上)。查看 的输出exec('echo $PATH')可能是执行此操作的好方法。结果必须类似于...:/usr/local/bin:...

不知道如何在 OSX 上更改默认 PATH 值。

相关内容