“which”命令在PHP中不起作用

时间:2012-10-06 07:52:47

标签: php mercurial shell-exec

我有两台远程服务器需要同步某个代码库。我把它全部设置在第一个,但在第二个设置时,我遇到了一个问题:

他们没有在同一位置安装hg。我不能只运行hg <command>因为它返回错误:

  

sh:hg:找不到命令

所以我一直在使用完整路径,但这不适用于两个单独的hg位置。

我认为运行which hg并使用响应中的路径会很聪明,所以这是新代码:

$hg = trim(`which hg`, "\n");
$output = `{$hg} pull -u`

但是$hgNULL,所以这不起作用!我可以ssh到第二个服务器,看到which hg肯定能正常工作。我甚至附加2>> path/to/log以查看which命令是否有任何错误,但没有。我确定它正在写入日志,因此与此无关。

我没有在安全模式下运行,我绝对可以运行shell_exec因为其他命令可以运行。

我知道我可以创建一个符号链接,因此它们都有相同的路径,只是对路径进行硬编码,但是这让我很生气,为什么shell_exec('which hg')无法工作!!!

2 个答案:

答案 0 :(得分:4)

which hg仅在您的路径中已有hg时才有效,否则会返回空字符串。

显然这不是您想要的,因为如果它已经在您的路径中,您可以使用hg

如果您使用的是具有不同配置的许多计算机,您只需在主目录中创建一个bin目录,将其添加到您的路径中,并链接到该目录中所需的命令。这将允许您在所有计算机上使用相同的命令。

对于PHP,您需要将其放在Web服务器可访问的目录中(但最好在文档根目录之外),除此之外,您可以通过提供公共目录的绝对路径来使用相同的技术。你创建了你的链接。

答案 1 :(得分:0)

尝试

shell_exec('/usr/bin/which hg');

代替。可能未设置$PATH,这是which

的典型位置