我必须修复这个小错误。首先,让我们谈谈一个小事实:在 Windows 上的 CLI 中,您不能运行路径中有空格的程序,除非转义:
C:\>a b/c.bat
'a' is not recognized as an internal or external command,
operable program or batch file.
C:\>"a b/c.bat"
C:\>
我在 PHP 中使用 proc_open...proc_close 来运行进程(程序),例如:
function _pipeExec($cmd,$input=''){
$proc=proc_open($cmd,array(0=>array('pipe','r'),
1=>array('pipe','w'),2=>array('pipe','w')),$pipes);
fwrite($pipes[0],$input);
fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]); // max execusion time exceeded ssue
fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);
fclose($pipes[2]);
$rtn=proc_close($proc);
return array(
'stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>(int)$rtn
);
}
// example 1
_pipeExec('C:\\a b\\c.bat -switch');
// example 2
_pipeExec('"C:\\a b\\c.bat" -switch');
// example 3 (sounds stupid but I had to try)
_pipeExec('""C:\\a b\\c.bat"" -switch');
示例 1
- 结果:1
- STDERR: 'C:\a' 不是内部或外部命令、可运行程序或批处理文件。
- 标准输出:
示例 2
- 结果:1
- STDERR: 'C:\a' 不是内部或外部命令、可运行程序或批处理文件。
- 标准输出:
示例 3
- 结果:1
- STDERR:文件名、目录名或卷标语法不正确。
- 标准输出:
所以你看,无论是哪种情况(双引号或不是双引号),代码都会失败。是我还是我错过了什么?