Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich sowohl stdout als auch stderr von einem Exec()-Befehl in PHP erfassen?
In PHP führt die Funktion exec() einen Befehl aus und gibt die Ausgabe von der Standardausgabe des Befehls zurück. Wenn der Befehl jedoch in stderr schreibt, wird diese Ausgabe nicht von exec() erfasst.
Um sowohl stdout als auch stderr von einem Befehl zu erfassen, können Sie die Funktion proc_open() verwenden. proc_open() bietet ein höheres Maß an Kontrolle über den Befehlsausführungsprozess, einschließlich der Möglichkeit, die stdin-, stdout- und stderr-Streams des Befehls weiterzuleiten.
Beispiel:
Betrachten wir das folgende Shell-Skript test.sh, das sowohl in stderr als auch schreibt stdout:
#!/bin/bash echo 'this is on stdout'; echo 'this is on stdout too'; echo 'this is on stderr' >&2; echo 'this is on stderr too' >&2;
Um dieses Skript in PHP auszuführen und sowohl stdout als auch stderr zu erfassen, können Sie den folgenden Code verwenden:
$descriptorspec = [ 0 => ['pipe', 'r'], // stdin 1 => ['pipe', 'w'], // stdout 2 => ['pipe', 'w'], // stderr ]; $process = proc_open('./test.sh', $descriptorspec, $pipes, dirname(__FILE__), null); $stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]); echo "stdout : \n"; var_dump($stdout); echo "stderr :\n"; var_dump($stderr);
Ausgabe:
Wenn Sie das obige PHP-Skript ausführen, erhalten Sie die folgende Ausgabe:
stdout : string(40) "this is on stdout this is on stdout too" stderr : string(40) "this is on stderr this is on stderr too"
Die Ausgabe wird angezeigt die stdout- und stderr-Streams aus dem test.sh-Skript.
Das obige ist der detaillierte Inhalt vonWie kann ich sowohl stdout als auch stderr von einem Exec()-Befehl in PHP erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!