PHP proc_open не может обработать путь с пробелами? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь использовать PHING для проверки git хранилища как части процесса сборки. PHING использует pear / versioncontrol_ git для обработки git задач. Мой путь к git: 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);
}

И это вывод двух вызовов к коду:

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.
...