【问题标题】:Shell_exec with git pull?Shell_exec 与 git pull?
【发布时间】:2011-02-01 03:36:47
【问题描述】:

我正在建立一个 github 帐户,与一些朋友一起做一个小项目。 我想让我的家用机器能够通过 php 执行 git pull,这样我们只需要调用这个小 php 文件就可以使机器保持最新状态。

截至目前:

<?php
$output = shell_exec('git help');
echo "<pre>$output</pre>";
?>

这很好用,我得到了输出,我在正确的目录中,所以 git pull 应该也能正常工作,但是我得到一个挂起的页面,没有错误,什么都没有。

有什么想法吗?

编辑: 一些精度,repo 很小,大约 300K,从命令行只需几秒钟。我也尝试了 shell_exec("dir"),我在正确的目录中。如果我足够精确的话,我正在 Windows 7 x64 上运行 xampp 的默认安装 :)

【问题讨论】:

  • 拉取远程仓库需要多长时间?我怀疑你只是超时了。
  • 谢谢,我在另一台计算机上开发时也有一个使用 git 的 web 项目。离线合并我的主人后,我总是必须通过 ssh 连接才能调用“git pull origin master”。现在我通过我调用的 php 脚本解决了它。问题当然是 php 作为 apache_mod 运行。作为 fcgi 运行解决了它。 :)
  • 尝试从 php 运行 git pull 时的注意事项集合 ... jondavidjohn.com/b/7m
  • 请查看这个可能对您有用的解决方法:stackoverflow.com/questions/9978400/…

标签: php git exec


【解决方案1】:

我建议探索set_time_limit(),并确保如果用户通过ignore_user_abort() 断开连接,您的 git pull 不会停止。即使从千兆连接的服务器上运行,一些存储库也需要一段时间才能克隆。

另外,检查 PHP 的工作目录,并确保运行 PHP 的用户有权写入 repo。如果您通过 CLI 运行它并且它“正常工作”,那么当您通过您使用的任何 Web 服务器访问时,PHP 很可能在没有适当权限的情况下运行。

如果您将目标目录chmod 设置为777 并且它可以工作,那么您很有可能需要重新编译 apache/php 以获得 suexec 支持。如果是这样,请不要将其保留为 777 :)

无论哪种方式,超时和用户中止仍然是有效的考虑因素,即使在您开始工作之后也是如此。

【讨论】:

  • 问题是,从命令行,命令只需一秒钟,存储库非常小。即使我让它运行几分钟,也没有。工作目录是正确的,因为 php 脚本是从项目的根目录调用的。 (我也试过 shell_exec 目录,只是为了确定)。
  • 我在 Windows 下运行,所以没有 chmod。但是特权问题是一个很好的问题,我会查一下。一旦我开始工作,我会添加时间限制并忽略用户中止:)
【解决方案2】:

所以,回答我自己的问题。

实际上是权限问题(感谢 tim),在 PHP CLI 中,脚本正在运行。

问题是服务 php 安装使用了一些奇怪的权限。 所以你/我需要通过命令行(或者在本例中为 Xampp 控制面板)启动 PHP 服务器。

现在它正在工作,给我“已经是最新的”。我在等待的答案:)

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 2011-07-05
    • 2016-01-12
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多