PHP:通过HTTP和命令行运行脚本时的结果不同

时间:2015-10-07 06:37:12

标签: php git github pull autodeploy

我有一个GIT仓库,我正在使用PHP脚本从主分支中提取并更新服务器上的文件。这是一个非常简单的解决方案,只是为了测试它。我想在github上添加一个webhook,在成功推送后发送回调,这样我就可以从这个回购中获取。

脚本双向运行

  • 来自命令行
  • 来自HTTP请求

不同之处在于,当我从HTTP运行它时,它不会提取新的更改,只显示它是最新的,并且即使我100%确定repo中有新的更改也不会执行任何操作。输出来自GIT命令,所以我确信它有效,并且apache有权运行该脚本文件和在其中使用的命令。

当我通过命令行运行它(通过相同的脚本或只是干净的git命令)一切都很好,脚本会提取新的更改并显示标准的GIT输出。

PHP代码:

echo "Pulling changes from master branch...\n";
$result = shell_exec('cd /var/git-test && git reset --hard HEAD && git pull');
if($result !== null){
  echo $result;
}else{
  echo $result;
  echo "Error in Git pull comand";
}

我该如何解决?

1 个答案:

答案 0 :(得分:1)

sudo -u www-data php deploy.php显示www-data用户没有在github上注册ssh密钥并且无法执行pull。我无法切换到www-data用户,因此我生成了他的密钥,而没有像运行脚本sudo -u www-data ssh-keygen -t rsa那样切换到它。在github上注册他的密钥后,它就像一个魅力。

也是专业提示! shell_exec()不显示当我在命令行中以另一个用户身份运行脚本时可见的所有输出。这真的令人困惑,花了我很多时间来弄清楚错误的位置。