PHP:通过HTTP和命令行运行脚本时的不同结果
我有一个GIT repo,我正在使用PHP脚本从主分支提取并更新服务器上的文件。这是一个非常简单的解决方案,只需测试一下。我想在github上添加一个webhook,在推送成功后发送回调,这样我就可以从这个repo中退出 脚本可以双向运行PHP:通过HTTP和命令行运行脚本时的不同结果,php,git,github,pull,autodeploy,Php,Git,Github,Pull,Autodeploy,我有一个GIT repo,我正在使用PHP脚本从主分支提取并更新服务器上的文件。这是一个非常简单的解决方案,只需测试一下。我想在github上添加一个webhook,在推送成功后发送回调,这样我就可以从这个repo中退出 脚本可以双向运行 从命令行 从HTTP请求 不同之处在于,当我从HTTP运行它时,它不会拉取新的更改,只是显示它是最新的,并且不会做任何事情,即使我100%确定repo中有新的更改。输出来自GIT命令,所以我确信它可以工作,并且apache有适当的权限来运行脚本文件和其中使
- 从命令行
- 从HTTP请求
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-user,因此我生成了他的密钥,而没有切换到它,就像我运行脚本sudo-u www-data-ssh-keygen-t rsa
时那样。在github上注册他的密钥后,它就像一个符咒
还有专业提示!shell_exec()不显示在命令行中作为另一个用户运行脚本时可见的所有输出。这真的很让人困惑,并且花费了我很多时间来找出错误所在。您是否尝试过用apache用户手动运行脚本?您怎么知道它“显示它是最新的”?万一还出现了禁用shell_exec的警告,打开它是不安全的。问题已解决:apache用户“www数据”应该已经生成了自己的ssh密钥,以后可以使用webhooks在github上验证pull请求。@Ôrel是的,这很有帮助,我通过运行它
sudo-u www-data-php-deploy.php
对它进行了测试,我发现它显示了一些shell_exec()没有返回的附加信息,这有点让人困惑。无法执行Git pull,因为www数据没有在github上注册ssh密钥。