Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich eine Live-Ausgabe von PHP-Shell-Befehlen erreichen?

Wie kann ich eine Live-Ausgabe von PHP-Shell-Befehlen erreichen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 00:41:11430Durchsuche

How Can I Achieve Live Output from PHP Shell Commands?

Live-Ausgabe mit PHP unter Verwendung von popen() und passhru()

Mit der Shell_exec()-Funktion von PHP können Sie einen Befehl ausführen und ihn erfassen Ausgabe. Allerdings ist die Live-Anzeige der Ausgabe während der Befehlsausführung mit shell_exec() oder anderen integrierten Funktionen wie system(), exec() oder passhru() nicht möglich.

Erwägen Sie für die Live-Ausgabe die Verwendung von popen( ) stattdessen. Es öffnet eine Pipe zu einem Prozess und ermöglicht Ihnen, dessen Ein-/Ausgabe zu lesen oder zu schreiben, als wäre es eine Datei.

Passthru() für sofortige Ausgabe:

Wenn Sie die Ausgabe dem Benutzer direkt anzeigen müssen, ohne auf den Abschluss des Befehls warten zu müssen, können Sie passhru() verwenden:

echo '<pre class="brush:php;toolbar:false">';
passthru($cmd);
echo '
';

Popen() für Echtzeitausgabe:

Um die Ausgabe live anzuzeigen, während der Befehl ausgeführt wird, verwenden Sie popen() und eine while-Schleife:

while (@ ob_end_flush()); // end output buffers

$proc = popen($cmd, 'r');
echo '<pre class="brush:php;toolbar:false">';
while (!feof($proc)) {
    echo fread($proc, 4096);
    @ flush();
}
echo '
';

Dieser Code öffnet eine Pipe zum Befehl, liest seine Ausgabe in Blöcken und zeigt sie im laufenden Betrieb an.

Nützlich Information:

  • Rufen Sie session_write_close() vor der Schleife auf, um Sitzungsprobleme zu verhindern.
  • Für Server hinter Nginx fügen Sie den Header „X-Accel-Buffering: no“ hinzu Verhindern Sie die Nginx-Pufferung.
  • Beachten Sie, dass die Live-Ausgabe störend sein kann, wenn Ihr Code in einer Schleife ausgeführt wird, die auch die aktualisiert Sitzung.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Live-Ausgabe von PHP-Shell-Befehlen erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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