Stream & Abbruch 2. Teil
PeterK
- php
0 cyRus
Vor einigen Tagen fragte ich:
In meinem Script öffne ich einen Stream, um die größe einer Datei zu überwachen (nur ein Beispiel!). Wenn nun jemand die größe der Datei ändert, bekommen alle User eine Meldung.
set_time_limit(0);
while(true) {
clearstatcache();
$newsize = filesize($file);
if($oldsize != $newsize) {
echo "Die Datei wurde geändert! Neue größe: $newsize<br>\n";
}
$oldsize = $newsize;
flush();
sleep(1); //Damit der Server nicht abstürtzt...
}
Ich hab ganz normal eine Shutdown-funktion registriert, und war überrascht, dass diese erst garnicht aufgerufen wurde. Ich hab ein bisschen weitergebohrt, und
$hfile = fopen("log.txt", "a");
fputs($hfile, connection_aborted());
fclose($hfile);
in die Schleife eingebaut. Das ergebnis: auch als der User die Seite schon längst verlassen hatte, schrieb das Script weiterhin nullen in das Script, und zwar solange, bis ich das Script per TaskManager beendete... So jetzt meine Frage: Was kann ich machen, um irgendwie den abbruch zu erkennen und die Schleife beenden??? Oder muss ich mir was anderes überlegen???
Als Antwort sagte man mier, ich solle 'while (connection_aborted()) {' benutzen. wie aber aus meinem Text hervorgeht, gibt in der Schleife TROTZ Abbruch, 'connection_aborted()' 0 zurück. Also geht auch 'while (connection_aborted()) {' nich... Die Schleife käuft einfach weiter! Noch andere Vorschläge?????
Vor einigen Tagen fragte ich:
In meinem Script öffne ich einen Stream, um die größe einer Datei zu überwachen (nur ein Beispiel!). Wenn nun jemand die größe der Datei ändert, bekommen alle User eine Meldung.
set_time_limit(0);
while(true) {
clearstatcache();
$newsize = filesize($file);
if($oldsize != $newsize) {
echo "Die Datei wurde geändert! Neue größe: $newsize<br>\n";
}
$oldsize = $newsize;
flush();
sleep(1); //Damit der Server nicht abstürtzt...
}Ich hab ganz normal eine Shutdown-funktion registriert, und war überrascht, dass diese erst garnicht aufgerufen wurde. Ich hab ein bisschen weitergebohrt, und
$hfile = fopen("log.txt", "a");
fputs($hfile, connection_aborted());
fclose($hfile);in die Schleife eingebaut. Das ergebnis: auch als der User die Seite schon längst verlassen hatte, schrieb das Script weiterhin nullen in das Script, und zwar solange, bis ich das Script per TaskManager beendete... So jetzt meine Frage: Was kann ich machen, um irgendwie den abbruch zu erkennen und die Schleife beenden??? Oder muss ich mir was anderes überlegen???
Als Antwort sagte man mier, ich solle 'while (connection_aborted()) {' benutzen. wie aber aus meinem Text hervorgeht, gibt in der Schleife TROTZ Abbruch, 'connection_aborted()' 0 zurück. Also geht auch 'while (connection_aborted()) {' nich... Die Schleife käuft einfach weiter! Noch andere Vorschläge?????
Die schleife läuft solange bis connection_aborted true ist also:
while(!connection_aborted()) { //Das ! nicht vergessen ;)
und wenn das Script nach beenden des Browsers weiter läuft:
ignore_user_abort(1); //Überbrückt glaube ich wieder die connection_aborted() function, aber bei mir funktionierts so ;)