shell_exec配置用于git pull,Godaddy与Bluehost对比

9

我有一个来自Github的git pull网络钩子,在两个远程上,GoDaddy [生产环境]和Bluehost [预发布环境]。这个问题不是关于这些公司本身,而是可能导致设置差异的原因。我有这个脚本,我已经将其设置为github.com上的提交后挂钩:

<?php
$output = shell_exec('git pull origin master');
echo "<pre>$output</pre>";
?>

当我在Github代码库上提交时,钩子会触发并在Bluehost上正常运行。但在Godaddy上它不起作用。
Bluehost浏览器响应:
"already up to date". Pull command works, and the Bluehost repo is updated.

Godaddy浏览器响应:

<pre></pre> Pull command has not worked. Repo not updated.

当我通过浏览器运行此脚本时:
<?php
$output = shell_exec('ls');
echo "<pre>$output</pre>";
?>

我在两个服务器上都得到了正确的'ls'目录输出。
当我通过SSH进入目录时,我可以手动发出'git pull origin master'命令,在两个服务器上都可以正常工作。那么这是否意味着Godaddy允许PHP发出一些命令,但不允许其他命令?我能不能修复这个问题?不可能没有人自动部署到Godaddy!

1
shell_exec 是否会执行任何东西?比如 echo 或者 ls - sobolevn
在Godaddy购买共享主机还是VPS呢? - Doon
2个回答

8

这可能类似于以前的案例,其中:

Godaddy技术支持确认在其共享托管环境中php无法访问git命令
他们表示需要使用VPS才能实现此目的。

此评论证实在共享服务器上,您可以配置的php设置非常有限。

因此,请与Godaddy支持人员核实是否适用于您的设置。


2
谢谢VonC,我猜那就是答案。既然我花了50点来提问,我想评论一下,只有疯子才会使用Godaddy进行托管。我现在已经处理了大约10个不同域名、10个不同客户的公司。新规则:如果你想让Jim为你的网站工作,它必须从Godaddy上下架。 - Jim Maguire

1

我遇到了一个类似的问题,当时我运行的命令是:

$output = shell_exec('git pull origin master');

尽管其他git命令不会返回空字符串,但该命令将返回空字符串。通过在shell命令的末尾添加2>&1来解决了这个问题:

$output = shell_exec('git pull origin master 2>&1');

这将把标准错误输出重定向到标准输出,我发现 git 抛出了一个看不见的错误。

http://us3.php.net/manual/en/function.shell-exec.php#106250

http://www.tldp.org/LDP/abs/html/io-redirection.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接