PHP proc_open无法处理带空格的路径?

PHP proc_open无法处理带空格的路径?,php,php-7,Php,Php 7,我正在尝试使用PHING作为构建过程的一部分签出git存储库。PHING使用pear/versioncontrol\u git来处理git任务。我的git路径是C:\ProgramFiles\git\bin\git.exe 使用此路径运行两个命令,--version和clone-q-repo=… --版本工作正常克隆给出的错误是C:\Program不是有效路径。当完全相同的代码可以毫无错误地执行--version命令时,我不明白为什么这会是一个问题 似乎正在发生的是,报价被剥离,但只是有时 这就

我正在尝试使用PHING作为构建过程的一部分签出git存储库。PHING使用pear/versioncontrol\u git来处理git任务。我的git路径是
C:\ProgramFiles\git\bin\git.exe

使用此路径运行两个命令,
--version
clone-q-repo=…

--版本
工作正常<代码>克隆给出的错误是
C:\Program
不是有效路径。当完全相同的代码可以毫无错误地执行
--version
命令时,我不明白为什么这会是一个问题

似乎正在发生的是,报价被剥离,但只是有时

这就是违规代码:

public function execute($arguments = array(), $options = array())
{
    $command = $this->createCommandString($arguments, $options);

    $descriptorspec = array(
        1 => array('pipe', 'w'),
        2 => array('pipe', 'w'),
    );
    $pipes = array();
    $resource = proc_open($command, $descriptorspec, $pipes, realpath($this->git->getDirectory()));

    $stdout = stream_get_contents($pipes[1]);
    $stderr = stream_get_contents($pipes[2]);
    foreach ($pipes as $pipe) {
        fclose($pipe);
    }

    $status = trim(proc_close($resource));
    if ($status) {
        $message = "Some errors in executing git command . $command\n\n"
                 . "Output:\n"
                 . $stdout."\n"
                 . "Error:\n"
                 . $stderr;
        var_dump($message);
        throw new VersionControl_Git_Exception($message);
    } else {
        var_dump('No errors in ' . $command);
    }

    return $this->stripEscapeSequence($stdout);
}
这是对代码的两个调用的输出:

C:\PHP Projects\Build\vendor\pear\versioncontrol_git\VersionControl\Git\Util\Command.php:240:
string(61) "No errors in "C:\\Program Files\\Git\\bin\\git.exe" --version"
C:\PHP Projects\Build\vendor\pear\versioncontrol_git\VersionControl\Git\Util\Command.php:237:
string(306) "Some errors in executing git command . "C:\\Program Files\\Git\\bin\\git.exe" clone -q --branch="master" "--REDACTED--" "C:\PHP Projects\Build\build"

Output:

Error:
'C:\\Program' is not recognized as an internal or external command,
operable program or batch file.

问题不在于--version,而在于运行git clonegit checkout所执行的命令

无法使用git.exe运行git clone命令或git checkout命令

当您可以使用git.exe运行--version命令时,它是“C:/Program Files/git/bin/git.exe”--version

所以结论是,在运行git clone或git checkout时,必须设置命令,您的路径应该是

“C:/Program Files/Git/bin>“Git克隆” 或 “C:/Program Files/Git/bin>“Git签出”

如果你还有问题,请告诉我


谢谢。

您好,您找到解决此问题的方法了吗?我现在也面临同样的问题。