shell_exec('which git')在Godaddy共享托管服务器上返回空字符串

时间:2015-05-18 05:00:22

标签: php git github ssh

我已经使用git和我的服务器(godaddy共享主机)设置了关于SSH密钥的所有设置,并且可以通过SSH使用git pull git@github.com:username/reponame.git

成功更新服务器

当我提交对git repo的更改时,我正在尝试使用simple-php-git-deploy自动更新测试服务器

当下面的php脚本摘录运行shell_exec('which git')时,该函数返回一个空字符串。

由于我可以在SSH中运行git命令,我觉得这必须是权限问题。

我尝试运行chmod 755 foldertoupdate而没有任何变化。

我需要做什么才能让php(或当前的apache用户)调用git命令?

// Check if the required programs are available
$requiredBinaries = array('git', 'rsync');

//.....

foreach ($requiredBinaries as $command) {
    $path = trim(shell_exec('which '.$command));
    if ($path == '') {
        die(sprintf('<div class="error"><b>%s</b> not available. It needs to be installed on the server for this script to work.</div><br> Output was: %s', $command,$path )); // this check fails on the first element, "git" claiming git is not installed
    } else {
        $version = explode("\n", shell_exec($command.' --version'));
        printf('<b>%s</b> : %s'."\n"
            , $path
            , $version[0]
        );
    }
}

更多信息:

  • 我正在更新的文件夹位于~/html/TeamBoard
  • 我正在调用代码的文件位于~/html/TeamBoard/deploy.php

2 个答案:

答案 0 :(得分:1)

Godaddy技术支持部门确认php无法在共享托管环境中访问git个命令。他们说实现这一目标需要VPS。

答案 1 :(得分:1)

正如我所看到的,它不是关于从代码执行git,而是关于执行shell程序(在这种情况下是which)。目前尚不清楚您是通过浏览器还是直接在shell中执行deploy.php脚本。

尝试使用exec('command -v git', $output, $retval);在PHP交互模式(git)中检查php -a命令可用性,看看这是否适用。