Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich eine Echtzeitausgabe von Shell-Befehlen in PHP erhalten?

Wie kann ich eine Echtzeitausgabe von Shell-Befehlen in PHP erhalten?

Mary-Kate Olsen
Freigeben: 2024-12-03 20:03:16
Original
320 Leute haben es durchsucht

How Can I Get Real-Time Output from Shell Commands in PHP?

Echtzeitausgabe mit der Shell-Ausführung von PHP

Die Shell-Ausführung in PHP mit Funktionen wie „shell_exec“ und „exec“ kann für die Interaktion mit nützlich sein das Betriebssystem. Standardmäßig zeigen diese Funktionen jedoch die gesamte Ausgabe erst an, nachdem der Befehl abgeschlossen wurde. Dies schränkt die Möglichkeit ein, den Fortschritt zu überwachen oder Aktualisierungen in Echtzeit anzuzeigen.

Lösung: Entfesseln der Live-Ausgabe

Um eine Ausgabeanzeige in Echtzeit zu erreichen, bietet PHP zwei primäre Möglichkeiten Optionen:

  1. popen() für Parallel Interaktion:

    popen() ermöglicht Ihnen die Einrichtung eines bidirektionalen Kommunikationskanals mit einem untergeordneten Prozess. Dadurch können Sie den untergeordneten Prozess lesen und schreiben, als wäre er eine Datei. Durch die Verwendung einer Schleife und fread() können Sie die Ausgabe erfassen und dynamisch anzeigen.

  2. passthru() für Direktausgabe:

    Für einen einfacheren Ansatz kann passhru() verwendet werden, um die Ausgabe eines Befehls direkt an den Browser zu drucken. Es bietet eine bequeme Möglichkeit, die Ergebnisse ohne Zwischenspeicherung zu streamen.

Codebeispiel mit popen():

// Ensure flushing of output buffers
while (@ ob_end_flush());

// Open the child process for reading
$proc = popen($cmd, 'r');

echo '<pre class="brush:php;toolbar:false">';

// Keep reading and displaying output until EOF
while (!feof($proc)) {
    echo fread($proc, 4096);
    flush();
}

echo '
'; // Close the process pclose($proc);
Nach dem Login kopieren

Hinweis:

  • Verwenden Sie session_write_close() vor der Schleife, wenn Sitzungen aktiv sind, um Blockierungen zu vermeiden gleichzeitige Anfragen.
  • Setzen Sie den Header header('X-Accel-Buffering: no'); wenn ein Nginxgateway vorhanden ist, um die Pufferung zu deaktivieren.

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

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage