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

时间:2020-02-27 16:16:57

标签: php php-7

在构建过程中,我尝试使用PHING检出git存储库。 PHING使用pear / versioncontrol_git处理git任务。我的git路径是Map<Integer, List<Integer>> result = list.stream() .collect(Collectors.groupingBy(A::getId, Collectors.mapping(A::getB, Collectors.collectingAndThen(Collectors.toList(), l -> l.stream().flatMap(List::stream).map(B::getId).collect(Collectors.toList())))));

使用此路径运行两个命令C:\Program Files\Git\bin\git.exe<gitpath> --version

<gitpath> clone -q -repo=...工作正常。 <gitpath> --version给出一个错误,指出<gitpath> clone... 不是有效路径。我感到困惑,为什么当完全相同的代码可以正确执行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);
}

1 个答案:

答案 0 :(得分:1)

您的问题不是--version引起的,而是您执行 git clone git 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 clone 要么 “ C:/ Program Files / Git / bin>” git checkout

让我知道您是否仍然对此有疑问。

谢谢。

相关问题