【问题标题】:Git pull via PHP shell_exec( ) works from SSH shell but not from web-browserGit pull via PHP shell_exec() 可以在 SSH shell 中工作,但不能在 web 浏览器中工作
【发布时间】:2021-10-30 00:09:56
【问题描述】:

我有一个简单的 PHP 脚本:

$output = shell_exec('git pull https://****@bitbucket.org/****/****.git 2>&1');
print_r($output)

我可以通过 SSH 连接到我的主机并使用“PHP scriptname.php”运行它,它运行良好,并在几分之一秒内告诉我一切都是最新的。

但是,当我尝试通过网络浏览器运行相同的 PHP 脚本时,它会无限期挂起。

【问题讨论】:

  • 使用 `/usr/bin/php -c "p​​ath/to/file.sh" 检查 .sh 文件的输出,看它是否抛出错误。

标签: php linux git web-hosting


【解决方案1】:

问题是您的网络服务器和 ssh shell 有不同的环境变量集。在这种情况下,问题是网络服务器的$PATH 变量中缺少git

要修复它,您可以将带有 git 二进制文件的目录添加到 $PATH 变量

set PATH=$PATH:/usr/local/cpanel/3rdparty/lib/path-bin

或者只是通过完整路径调用它 /usr/local/cpanel/3rdparty/lib/path-bin/git

至于 git 凭据 - 尝试找到负责任的环境变量。

【讨论】:

  • 如果我删除更改目录部分并离开 git pull,Web 浏览器仍然挂起并且不执行任何操作。如果它不在正确的目录中,它应该返回错误“致命:不是 git repostiory”错误,但它只是挂起。请注意,当我在终端中并使用以下命令运行 php 文件时,它可以工作: php "script.php" 但是当我从浏览器运行脚本时,它只是挂起......我已经编辑了我的问题以删除更改目录,因为它好像没必要
  • 抱歉,我没有检查您的编辑。如果您有足够的权限,请尝试发出sudo -u www-data git pull <...> 来检查输出。您的网络服务器用户可能没有目标目录的写入权限。
  • 应该,但是你的 shell 和 webserver 设置了不同的环境变量。尝试在你的 ssh shell 中运行这个php -r "system('git pull <...>');"。它工作正常吗?
  • 我有点气馁:) 可能是环境变量比较会给你一个提示?尝试比较env shell 和 web 服务器执行的命令结果。
  • 如您所见,PATH 变量差异很大。请通过which git 检查“git”二进制位置。作为一个肮脏的修复尝试将此行添加到 bash 脚本的顶部:set PATH=/usr/local/jdk/bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/cpanel/composer/bin:/opt/puppetlabs/bin:/usr/local/bin:/usr/X11R6/bin:/home/REPLACEDUSERNAME/.local/bin:/home/REPLACEDUSERNAME/bin
猜你喜欢
  • 1970-01-01
  • 2014-03-27
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
相关资源
最近更新 更多