Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
";其中";司令部赢得';我不能用PHP工作_Php_Mercurial_Shell Exec - Fatal编程技术网

";其中";司令部赢得';我不能用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
时一样。