gpt4 book ai didi

php - PHP 中的奇怪错误、路径中的空格和 Windows

转载 作者:可可西里 更新时间:2023-11-01 13:11:19 26 4
gpt4 key购买 nike

我必须修复这个小错误。先说一个小事实:在 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:文件名、目录名或卷标语法不正确。
  • 标准输出:

所以你看,无论哪种情况(双引号或不)代码都会失败。是我还是我错过了什么?

最佳答案

最不幸的是,修复没有按预期工作,但是 Pekka 的第一个建议给了我一个想法:

$file='C:\a b\c';
$cmdl='/d /b /g';

if(strtolower(substr(PHP_OS,0,3))=='win') // if windows...
$file='cd '.escapeshellarg(dirname($file)).' && '.basename($file);

_pipeExec($file.' '.$cmdl);

这是特定于平台的,我希望我也不必在 linux 上解决这个问题。到目前为止效果很好!

关于php - PHP 中的奇怪错误、路径中的空格和 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com