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


PHP: different result when running script via HTTP and in command line

我有一个GIT仓库,我使用PHP脚本从主分支和服务器上更新文件。这是一个很简单的解决方案,只是为了测试一下。我想在github上添加一个webhook,以便在成功推送后发送回调,以便我可以从这个repo中拉。

脚本双向运行

  • from命令行
  • 从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";
}

我怎么能解决这个问题?

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()不显示当我在命令行中作为另一个用户运行脚本时可见的所有输出。这真的很令人困惑,花了我很多时间来找出错误在哪里。