Redirect – PHP führt das Shell-Skript aus und erhält die Standardausgabe und Fehlerausgabe

WBOY
Freigeben: 2016-09-08 08:43:57
Original
1976 Leute haben es durchsucht

1. Frage

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

Die

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>
Nach dem Login kopieren
Nach dem Login kopieren
php liest dann die Dateiinhalte

und out.txt und gibt sie zurück. err.txt

Nachteile davon: Es werden Zwischendateien generiert. Wenn die Ausführung des Shell-Befehls

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.txterzeugt 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

-Funktion:

exec() Die Parameter in

<code>string exec ( string $command [, array &$output [, int &$return_var ]] )</code>
Nach dem Login kopieren
Nach dem Login kopieren
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.

$output

Antwortinhalt:

1. Frage

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

Die

Umleitung

in der Shell kann die Standardausgabe bzw. die Fehlerausgabe in Dateien umwandeln, aber temporäre Dateien generieren.

php liest dann die Dateiinhalte

und
<code class="bash">my_cmd 1>out.txt 2>err.txt</code>
Nach dem Login kopieren
Nach dem Login kopieren
und gibt sie zurück.

out.txtNachteile davon: Es werden Zwischendateien generiert. Wenn die Ausführung des Shell-Befehls err.txt lange dauert (vielleicht mehrere Minuten), werden die Namen von

und

werden jedes Mal anders benötigt, um Schreibkonflikte zu vermeiden. Dies my_cmderzeugt 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.txtphps -Funktion:

Die Parameter in

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>
Nach dem Login kopieren
Nach dem Login kopieren

Ich habe die Antwort gefunden, frage und beantworte sie selbst. $outputVerwenden Sie die Funktion

, die ein Shell-Skript ausführen und stdout bzw. stderr speichern kann. Sie unterstützt auch die Einstellung von stdin:


Referenzcode: proc_open()

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage