Ein Shell-Skript muss im PHP-Code ausgeführt werden, und es wird gehofft, dass seine Standardausgabe (stdout) und Fehlerausgabe (stderr) bzw. Verwenden Sie die -Umleitung der Shell, um die Standardausgabe und die Fehlerausgabe in eine Datei zu übertragen, und verwenden Sie dann PHP, um die Datei zu lesen. Dies ist möglich, aber der Inhalt der Ausgabedatei wird nach der Rückübertragung nicht mehr benötigt php. Gibt es eine Möglichkeit, die Redirect-Ausgabe der Shell in eine Variable zu setzen?
Um die Funktion des Skripts auszuführen, kann es nicht mit PHP selbst abgeschlossen werden (führen Sie das Skript in der R-Sprache aus), und sowohl die reguläre Ausgabe als auch die Fehlerausgabe müssen zurückgemeldet werden.2. Bereits ausprobiert
Umleitung in der Shell kann die Standardausgabe bzw. die Fehlerausgabe in Dateien umwandeln, aber temporäre Dateien erzeugen.
<code class="bash">my_cmd 1>out.txt 2>err.txt</code>
und out.txt
und gibt sie zurück. err.txt
lange dauert (vielleicht mehrere Minuten), werden die Namen von my_cmd
und my_cmd
werden jedes Mal anders benötigt, um Schreibkonflikte zu vermeiden. Dies out.txt
erzeugt viele unnötige Zwischendateienerr.txt
. Selbst wenn sie rechtzeitig gelöscht werden, entsteht immer noch ein E/A-Overhead, der hoffentlich vermieden werden kann.
phps
exec()
Die Parameter in
<code>string exec ( string $command [, array &$output [, int &$return_var ]] )</code>
$output
seine Standardausgabe (stdout) und Fehlerausgabe (stderr) bzw. Verwenden Sie die -Umleitung der Shell, um die Standardausgabe und die Fehlerausgabe in eine Datei zu übertragen, und verwenden Sie dann PHP, um die Datei zu lesen. Dies ist möglich, aber der Inhalt der Ausgabedatei wird nach der Rückübertragung nicht mehr benötigt php. Gibt es eine Möglichkeit, die Redirect-Ausgabe der Shell in eine Variable zu setzen? Um die Funktion des Skripts auszuführen, kann es nicht mit PHP selbst abgeschlossen werden (führen Sie das Skript in der R-Sprache aus), und sowohl die reguläre Ausgabe als auch die Fehlerausgabe müssen zurückgemeldet werden.
2. Bereits ausprobiertDie
php liest dann die Dateiinhalte
und<code class="bash">my_cmd 1>out.txt 2>err.txt</code>
out.txt
Nachteile davon: Es werden Zwischendateien generiert. Wenn die Ausführung des Shell-Befehls err.txt
lange dauert (vielleicht mehrere Minuten), werden die Namen von
werden jedes Mal anders benötigt, um Schreibkonflikte zu vermeiden. Dies my_cmd
erzeugt viele unnötige Zwischendateienmy_cmd
. Selbst wenn sie rechtzeitig gelöscht werden, entsteht immer noch ein E/A-Overhead, der hoffentlich vermieden werden kann. out.txt
err.txt
phps -Funktion:
exec()
scheinen nur den Inhalt von „Bildschirmausgabe beim Ausführen des Skripts“ zu erhalten, der stdout oder eine Mischung aus stdout und stderr ist und nicht separat abgerufen werden kann.
<code>string exec ( string $command [, array &$output [, int &$return_var ]] )</code>
Ich habe die Antwort gefunden, frage und beantworte sie selbst. $output
Verwenden Sie die Funktion
Referenzcode: proc_open()