2009-07-04 15 views
4

Wenn ich einen Datenstrom erzeuge, der an einen Browser gesendet wird, und der Benutzer den Browser schließt, kann ich innerhalb von PHP feststellen, dass ich nicht die Mühe haben muss, den Rest des Streams zu generieren oder zu senden? Ich möchte etwas in dieser Schleife einzufügen:Kann PHP sagen, wenn der Browser verschwindet?

while (!feof($pipes[1])) { 
    echo fgets($pipes[1]); 
} 

Mein Notfallplan ist der Browser eine JavaScript onunload verwenden Sie einen anderen PHP-Seite zu schlagen, den Prozess zu töten, die die Daten der Erzeugung, aber es wäre sauberer, wenn PHP könnte sagen, wenn ich ins Nirgendwo zurückgehe.

Antwort

1

Es gibt auch eine Funktion namens register_shutdown_function(), die angeblich ausgeführt wird, wenn die Ausführung stoppt. Ich habe es nie benutzt, also werde ich nicht dafür bürgen, wie gut es funktioniert, aber ich dachte, ich würde es aus Gründen der Vollständigkeit erwähnen.

+0

Schließen, aber in diesem Fall möchte er nur die Verarbeitung der Daten auf Benutzerabbruch beenden. – Ballsacian1

1

Ich glaube, dass Skript automatisch beendet wird, wenn normal geladen (kein Ajax). Aber wenn Sie eine Art Long-Polling über PHP mit xmlhttprequest implementieren möchten, denke ich, dass Sie es mit einer Art von Javascript tun müssen, denn dann kann PHP es nicht erkennen. Ich möchte auch den genauen Fall kennen.

0

Diese Antworten zeigten mir, wonach ich suchte. Der zugrunde liegende Prozess benötigt besondere Aufmerksamkeit, um ihn zu töten. Ich musste aus der Schleife springen. Nochmals vielen Dank, Stack Overflow.

while (!feof($pipes[1]) && !connection_aborted()) 
{ 
    echo fgets($pipes[1]); 
} 

if (connection_aborted()) 
{ 
    exec('kill -4 '.$mypid); 
} 
Verwandte Themen