【问题标题】:why git clone in php can execute with cli but fpm not为什么 php 中的 git clone 可以用 cli 执行但 fpm 不能
【发布时间】:2018-01-06 11:41:54
【问题描述】:

我想在我的 php 脚本中执行 git 命令。这是我的脚本 demo.php

<?php
    exec("ssh -v > log1.txt 2>&1");
    exec('git clone git@github.com:xxx/xxx.git >log.txt 2> &1',
    $out,$ret);
?>

当我执行这个时:

php demo.php

它克隆目标项目。但是,当我通过 fpm 在浏览器中键入 url 执行它时,它会将请求发送到 nginx,然后 nginx 将此请求传输到fpm

 type url: localhost:port/demo.php

现在遇到麻烦了,输出如下:

log1.txt

usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
       [-D [bind_address:]port] [-E log_file] [-e escape_char]
       [-F configfile] [-I pkcs11] [-i identity_file]
       [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
       [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
       [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
       [user@]hostname [command]

fpmssh执行的这个脚本好像已经安装好了。 但是 log.txt 如下:

 Cloning into '/home/geek/xxx/phpStudy/idl'...
 error: cannot run ssh: No such file or directory
 fatal: unable to fork

从这个文件执行git clone时好像找不到ssh命令。


我可以用cli,我可以用fpm执行ssh命令,但是我不能运行sshgit clonefpm。这个问题折磨了我好几天。我会很感激任何建议。

【问题讨论】:

  • 如果您想澄清或为您的问题添加详细信息,请编辑您的原始问题而不是重新发布它。
  • 链接的可能重复的@Paul 被标记为this question 的可能重复(也由@Paul)
  • 我不熟悉以这种方式使用 git(我的 IDE 为我这样做)但是,我可以说 exec 是彼此独立完成的,所以如果一个依赖于另一个,它不会工作。这就像在单独的控制台中运行每个命令。但就像我说的,我不知道他们是否相互依赖。附言解决这个问题的方法是从运行命令的 PHP 运行 bash 或 shell 脚本。
  • @Milk 是的,那是因为那个问题缺少任何调试,后一个问题告诉你该怎么做。如果这里的发布者对其进行编辑以包含这些结果,我将删除它。

标签: php git nginx ssh


【解决方案1】:

我已经解决了这个问题。解决方法如下,希望对遇到此问题的人有所帮助。


fpm 可以监听多个端口,每个端口都有一个池配置文件。在这个配置池中有一个指令:

 ;env[PATH] = /usr/local/bin:/usr/bin:/bin 

所以fpm的环境变量PATH可能与os不同,也就是说有些我们可以在shell中使用的命令在fpm中可能找不到。

最后我通过修改env[PATH]

解决了这个问题

【讨论】:

    猜你喜欢
    • 2014-01-05
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2011-06-06
    • 2016-08-21
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多