Muszę naprawić ten mały błąd. Najpierw porozmawiajmy o małej rzeczywistości: W CLI w systemie Windows, nie można uruchomić program z miejscem na swojej drodze, chyba że uciekł:Dziwny błąd w PHP, Spaces in Paths i 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:\>
Używam proc_open ... proc_close w PHP do prowadzenia procesu (programu), na przykład:
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');
Przykład 1
- Wynik: 1
- STDERR: "C: \ a" nie jest rozpoznawane jako polecenie wewnętrzne lub zewnętrzne, program roboczy lub plik wsadowy.
- STDOUT:
Przykład 2
- Wynik: 1
- STDERR: 'C: \ a' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, dostosowany program lub partia plik.
- STDOUT:
Przykład 3
- Wynik: 1
- STDERR: Składnia etykieta pliku, nazwa katalogu lub objętość jest nieprawidłowe.
- STDOUT:
Więc widzisz, albo przypadek (cudzysłowy lub nie) kod nie powiedzie się. Czy to ja czy ja czegoś brakuje?
strzał w ciemno, ale można spróbować przełączania rodzajów ofertę? ('' '' ') –
Nie mam w tym żadnego doświadczenia, ale w wierszu polecenia uruchamiasz" ab/c.bat ", aw PHP nazywasz" C: \ ab \ c.bat ", w tym ścieżkę wewnątrz Cytaty, może wywołanie C: \ "ab \ c.bat" działa? –
@Pekka, otrzymuję to samo co Przykład 3, wydaje się, że pojedyncze cudzysłowy nie są znakami kontenerowymi, jak podwójne cudzysłowy. – Christian