【问题标题】:PHP: different result when running script via HTTP and in command linePHP:通过 HTTP 和命令行运行脚本时的不同结果
【发布时间】:2015-10-07 06:37:12
【问题描述】:

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

脚本双向运行

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

我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试过使用 apache 用户手动运行脚本?
  • 你怎么知道它“显示它是最新的”?
  • 以防万一shell_exec应该被禁用的警告,打开它是不安全的。
  • 问题已解决:Apache 用户“www-data”应该已经生成了自己的 ssh 密钥,以后可以使用 webhooks 对 github 上的拉取请求进行身份验证。
  • @Ôrel 是的,这有帮助,我通过运行sudo -u www-data php deploy.php 对其进行了测试,我发现它显示了一些 shell_exec() 没有返回的附加信息,这有点令人困惑. git pull 无法执行,因为 www-data 没有在 github 上注册他的 ssh 密钥。

标签: php git github pull autodeploy


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2017-10-13
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多