";其中";司令部赢得';我不能用PHP工作
我有两个远程服务器,需要有一个同步的特定代码库。我在第一个上都设置好了,但在第二个上设置时,我遇到了一个问题: 它们没有在同一位置安装";其中";司令部赢得';我不能用PHP工作,php,mercurial,shell-exec,Php,Mercurial,Shell Exec,我有两个远程服务器,需要有一个同步的特定代码库。我在第一个上都设置好了,但在第二个上设置时,我遇到了一个问题: 它们没有在同一位置安装hg。我不能只运行hg,因为它返回错误: sh:hg:未找到命令 因此,我一直在使用完整路径,但这对两个独立的hg位置不起作用 我认为运行which hg并使用来自响应的路径会更聪明,因此下面是新代码: $hg = trim(`which hg`, "\n"); $output = `{$hg} pull -u` 但是$hg是NULL,所以这不起作用!我可以用s
hg
。我不能只运行hg
,因为它返回错误:
sh:hg:未找到命令
因此,我一直在使用完整路径,但这对两个独立的hg
位置不起作用
我认为运行which hg
并使用来自响应的路径会更聪明,因此下面是新代码:
$hg = trim(`which hg`, "\n");
$output = `{$hg} pull -u`
但是$hg
是NULL
,所以这不起作用!我可以用ssh连接到第二台服务器,看看哪个hg确实有效。我甚至添加了2>>path/to/log
,查看which
命令是否有错误,但没有。我确定它正在写日志,所以它与此无关
我没有在安全模式下运行,而且我绝对可以运行shell\u exec
,因为其他命令也可以运行
我知道我可以创建一个符号链接,这样它们都有相同的路径,并且只是硬编码路径,但这让我抓狂为什么shell\u exec('which hg')
不工作 试试看
shell_exec('/usr/bin/which hg')代码>
相反$PATH可能未设置,这是的典型位置,请尝试
shell_exec('/usr/bin/which hg')代码>
相反$PATH
可能未设置,这是的一个典型位置,只有当hg
已经在您的路径中时,它才会工作,否则它将返回空字符串
显然这不是您想要的,因为如果它已经在您的路径中,您可以使用hg
如果您使用的机器配置不同,您可以在主目录中创建一个bin
目录,将其添加到路径中,并链接到该目录中所需的命令。这将允许您在所有机器上使用相同的命令
对于PHP,您需要将其放在web服务器可访问的目录中(但最好在文档根目录之外),此外,您还可以使用相同的技术,为创建链接的公共目录提供一个绝对路径。只有当hg
已经在您的路径中时,hg
才会起作用,否则它将返回空字符串
显然这不是您想要的,因为如果它已经在您的路径中,您可以使用hg
如果您使用的机器配置不同,您可以在主目录中创建一个bin
目录,将其添加到路径中,并链接到该目录中所需的命令。这将允许您在所有机器上使用相同的命令
对于PHP,您需要将其放在web服务器可访问的目录中(但最好放在文档根目录之外),此外,您还可以使用相同的技术,为创建链接的公共目录提供一个绝对路径。好的,这很有意义。多好的解决方案啊?有没有一种方法可以将hg
的路径添加到我的路径中,让PHP可以查看,比如在我的PHP.ini或其他文件中,因此每个服务器的路径都不同?@CWSpear添加了一些关于可能的解决方案的信息。好吧,因为其他东西正在工作,/usr/bin/
显然在我的路径中,因此,我在/usr/bin/
中为hg
创建了符号链接。这和你说的差不多,只是不在家里。可以吗?我缺少的任何东西都不能让它好起来吗?@CWSpear不,只要你是机器的根用户,就可以正常工作。有时使用/usr/local/bin
或/opt
可以更容易地知道哪些是系统二进制文件,哪些是本地调整,但这更多的是技术性的。太好了,谢谢。一切都很好。一次推送,两台(如果算上本地的话,是三台)服务器都是同步的。多好的解决方案啊?有没有一种方法可以将hg
的路径添加到我的路径中,让PHP可以查看,比如在我的PHP.ini或其他文件中,因此每个服务器的路径都不同?@CWSpear添加了一些关于可能的解决方案的信息。好吧,因为其他东西正在工作,/usr/bin/
显然在我的路径中,因此,我在/usr/bin/
中为hg
创建了符号链接。这和你说的差不多,只是不在家里。可以吗?我缺少的任何东西都不能让它好起来吗?@CWSpear不,只要你是机器的根用户,就可以正常工作。有时使用/usr/local/bin
或/opt
可以更容易地知道哪些是系统二进制文件,哪些是本地调整,但这更多的是技术性的。太好了,谢谢。一切都很好。一次推送,两台(如果算上本地的话,三台)服务器都是同步的。当我推送我的回购协议时,通过BitBucket.org触发的帖子。当我推送我的回购协议时,通过BitBucket.org触发的帖子。哪个
有效,所以我不认为是这样。它也可能会导致一个错误,比如当我试图使用hg
时,它起了作用,所以我认为不是这样。它也可能会导致一个错误,就像我尝试使用hg
时一样。