Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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:通过HTTP和命令行运行脚本时的不同结果_Php_Git_Github_Pull_Autodeploy - Fatal编程技术网

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

PHP:通过HTTP和命令行运行脚本时的不同结果,php,git,github,pull,autodeploy,Php,Git,Github,Pull,Autodeploy,我有一个GIT repo,我正在使用PHP脚本从主分支提取并更新服务器上的文件。这是一个非常简单的解决方案,只需测试一下。我想在github上添加一个webhook,在推送成功后发送回调,这样我就可以从这个repo中退出 脚本可以双向运行 从命令行 从HTTP请求 不同之处在于,当我从HTTP运行它时,它不会拉取新的更改,只是显示它是最新的,并且不会做任何事情,即使我100%确定repo中有新的更改。输出来自GIT命令,所以我确信它可以工作,并且apache有适当的权限来运行脚本文件和其中使

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

脚本可以双向运行

  • 从命令行
  • 从HTTP请求
不同之处在于,当我从HTTP运行它时,它不会拉取新的更改,只是显示它是最新的,并且不会做任何事情,即使我100%确定repo中有新的更改。输出来自GIT命令,所以我确信它可以工作,并且apache有适当的权限来运行脚本文件和其中使用的命令

当我通过命令行运行它时(通过相同的脚本或者只使用cleangit命令),一切都很好,脚本会进行新的更改并显示标准的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-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密钥。