Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich eine Echtzeitausgabe von einem PHP-Prozess erhalten?

Wie kann ich eine Echtzeitausgabe von einem PHP-Prozess erhalten?

DDD
DDDOriginal
2024-12-23 18:34:14517Durchsuche

How Can I Get Realtime Output from a PHP Process?

Prozess mit Echtzeitausgabe in PHP ausführen

Bei der Ausführung von Prozessen in PHP kann es wünschenswert sein, deren Ausgabe in Echtzeit anzuzeigen. In diesem Artikel wird eine Methode untersucht, um dies mithilfe der Funktion exec() und einer einzigartigen Konfiguration von Deskriptorspezifikationen zu erreichen.

Echtzeit-Ausgabeerfassung

Um die Ausgabe eines Prozesses zu erfassen In Echtzeit müssen die folgenden Deskriptorspezifikationen angegeben werden:

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from
    1 => array("pipe", "w"), // stdout is a pipe that the child will write to
    2 => array("pipe", "w") // stderr is a pipe that the child will write to
);

Dieses Setup leitet stdin, stdout und stderr um in Pipes, sodass wir mit der Funktion fgets() in Echtzeit aus stdout lesen können.

Beispiel: Ping mit Echtzeitausgabe

Um diese Methode zu demonstrieren, führen wir sie aus der Ping-Befehl mit Echtzeitausgabe:

$cmd = "ping 127.0.0.1";

$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre class="brush:php;toolbar:false">";

if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";

Dieser Code gibt jede Zeile des Ping-Prozesses aus, sobald sie verfügbar ist, und bietet eine Live-Ansicht des Netzwerkverkehrs.

Prozessbeendigung

Das Beenden von Prozessen, wenn ein Benutzer eine Webseite verlässt, kann eine Herausforderung sein. Bei lang andauernden Prozessen wie Ping kann es sein, dass diese auch nach dem Schließen der Seite weiter ausgeführt werden.

Um dieses Problem zu beheben, kann man die folgenden Techniken anwenden:

  • Verwenden Sie proc_terminate(), um den Prozess explizit abzubrechen, wenn das Skript beendet wird.
  • Verwenden Sie pcntl_signal(), um den Benutzer beim Verlassen der Seite abzufangen und den Prozess abzubrechen entsprechend.
  • Legen Sie ein Timeout für den Prozess fest und beenden Sie ihn automatisch nach einem bestimmten Zeitraum.

Durch die Implementierung dieser Methoden können Entwickler sicherstellen, dass von ihren PHP-Skripten gestartete Prozesse ordnungsgemäß verarbeitet werden wenn ein Benutzer die Seite verlässt.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Echtzeitausgabe von einem PHP-Prozess erhalten?. 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