【问题标题】:How to push git from php using exec()如何使用 exec() 从 php 推送 git
【发布时间】:2014-11-29 21:19:04
【问题描述】:

这是我的 push.bat 文件

echo "Hello world!"
cd abhishek3/
call git add .
call git commit -m "sadf"
call heroku accounts:set abhishek84 
call git push heroku master

我可以通过在 cmd 中运行 push.bat 文件来推送到我的存储库

我想从 php 推送到我的仓库,尝试了 sn-ps 但它们都不适合我。

exec("psexec -d push.bat");

结果: PHP 页面无限加载

$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("cmd /C abhishek3.bat, 0, false);

结果:页面在一段时间后停止加载,没有任何效果

exec("cmd.exe /c abhishek3.bat")

结果:页面在一段时间后停止加载,没有任何效果

编辑: 尝试了以下 sn-p 但没有任何效果。

exec("hstart.exe /NOCONSOLE \"cmd.exe /c \"abhishek3.bat\"\"");

上面的 sn-p 在从 cmd 运行时运行成功,但从 php 通过 exec() 运行时不起作用。 Download hstart (Hidden Start Binary)

【问题讨论】:

  • 正如您所说的“页面加载”,我假设您正在通过 Web 服务器进行测试?你尝试过 php cli 吗?可能网络服务器正在与您的用户的其他权限一起运行并停止它?
  • 我正在从 localhost 运行网络服务器。当我运行 php -r "$ret = exec('abhishek3.bat'); echo $ret;"从 cmd 它成功执行批处理文件。如果我从网页运行它,它不会执行推送..

标签: php windows git batch-file git-push


【解决方案1】:
  1. 检查web用户的权限是否正确(可以访问文件并执行git)
  2. 检查 git 的路径以及它可能需要的任何环境变量。您可能必须在脚本中设置这些环境变量并使用绝对路径)
  3. 检查 IIS 或 apache(无论您使用哪个)是否允许执行一般程序和 bat 文件(例如,如果是 apache,您可能需要根据您的配置配置 httpd.conf 或 htaccess)

【讨论】:

  • git init 运行成功.. git commit 运行成功... git push 在通过 php 网页运行时不运行(它在从 PHP CLI 执行时运行..)可能是什么原因吗?
  • 它看起来像防火墙限制。尝试 (1) 暂时关闭 iptables (2) 暂时关闭 selinux。
  • 我只记得这是windows。尝试关闭防火墙。这也是powershell,检查executionpolicy并设置为unrestricted
  • 防火墙已被禁用。此外,我将执行策略设置为不受限制,但 git push heroku master 没有工作。
  • 作为网络用户可能缺少 SSH 密钥/凭据/known_hosts
猜你喜欢
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2014-06-12
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多