Странная ошибка в PHP, пробелах в путях и Windows

Мне нужно исправить эту небольшую ошибку. Сначала поговорим о небольшом факте: В CLI в Windows вы не можете запускать программу с пробелом в пути, если не экранированы:

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:\>

Я использую proc_open ... proc_close в PHP для запуска процесса (программы), пример:

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' не распознается как внутренняя или внешняя команда, действующая программа или командный файл.
  • STDOUT:

Пример 2

  • РЕЗУЛЬТАТ: 1
  • STDERR: 'C: \ a' не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл.
  • STDOUT:

Пример 3

  • РЕЗУЛЬТАТ: 1
  • STDERR: неверное имя файла, имя каталога или синтаксис метки тома.
  • STDOUT:

Итак, вы видите ли, в любом случае (двойные кавычки или нет) код не работает. Это я или я чего-то упустил?

7
задан Christian 19 November 2010 в 15:06
поделиться