PHP proc_open无法处理带空格的路径?
我正在尝试使用PHING作为构建过程的一部分签出git存储库。PHING使用pear/versioncontrol\u git来处理git任务。我的git路径是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命令时,我不明白为什么这会是一个问题 似乎正在发生的是,报价被剥离,但只是有时 这就
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 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克隆” 或 “C:/Program Files/Git/bin>“Git签出” 如果你还有问题,请告诉我
谢谢。您好,您找到解决此问题的方法了吗?我现在也面临同样的问题。