ignore_user_abort funktioniert nicht
Horatius
- php
Hallo Leute,
Ich habe bereits im Forum nachgesehen aber nichts geeignetes gefunden.
Ich will mit ignore_user_abort(TRUE) dafür sorgen daß ein Skript vollständig aufgerufen wird. Auf anderen Servern benutze ich das auch erfolgreich aber auf dem aktuellen will es einfach nicht klappen. Ich habe auch versucht über Google etwas brauchbares zu finden, bin aber höchstens auf das gleiche Problem ohne Lösung gekommen. Wenn ich allerdings die Hinweise richtig gelesen habe geht es um den CGI-Modus der die Funktionalität von ignore_user_abort irgendwie beeinflußt - genaueres konnte ich leider nicht herausfinden.
MiniSystemInfo:
System: Linux infong 2.4 #1 SMP Tue May 23 17:47:33 CEST 2006 i686 unknown
Server API: CGI
safe_mode: Off
Ich habe folgenden Code zum Testen (teils von php.net):
-----------------------------------------------------------------------
// Ignore user aborts and allow the script
// to run forever
ignore_user_abort(TRUE);
set_time_limit(0);
$fp = fopen('protokoll.txt', 'w');
fwrite($fp, 'Skriptstart ... ');
fclose($fp);
echo 'Testing connection handling in PHP';
// Run a pointless loop that sometime
// hopefully will make us click away from
// page or click the "Stop" button.
while(1)
{
echo 'loop ... ';
// Did the connection fail?
if(connection_status() != CONNECTION_NORMAL)
{
break;
}
// Sleep for 10 seconds
sleep(10);
}
// If this is reached, then the 'break'
// was triggered from inside the while loop
// So here we can log, or perform any other tasks
// we need without actually being dependent on the
// browser.
$fp = fopen('protokoll.txt', 'a');
fwrite($fp, 'Skriptende');
fclose($fp);
-----------------------------------------------------------------------
Leider beinhaltet die "protokoll.txt" nur "Skriptstart ..." wenn ich während der loop abbreche, also läuft der Skript nicht weiter. Ich würde mich freuen wenn mir jemand mit Tipps oder möglichen Workarounds geben könnte um den Skript dennoch fertig auszuführen.
Gruß
Horatius
Hi,
Ich habe folgenden Code zum Testen (teils von php.net):
Warum dort ein derartiges Script vorgeschlagen wird, ist mir schleierhaft.
Leider beinhaltet die "protokoll.txt" nur "Skriptstart ..." wenn ich während der loop abbreche, also läuft der Skript nicht weiter.
Die Manualseite zu ignore_user_abort besagt, dass PHP den Abbruch der Verbindung nur dann ueberhaupt mitbekommen kann, wenn versucht wird, wieder Daten an den Client zu senden. Das Beispielscript enthaelt keinerlei solchen Versuch, also verstehe ich nicht, welche Aussagekraft es bezueglich des Sachverhaltes ueberhaupt haben soll.
MfG ChrisB
Hi,
Ich habe folgenden Code zum Testen (teils von php.net):
Warum dort ein derartiges Script vorgeschlagen wird, ist mir schleierhaft.
Dir ist schon klar daß es sich dabei nur um einen Testskript handelt?! Wenn ich den Skript abbreche will ich danach ja auch sehen ob etwas passiert ist.
Leider beinhaltet die "protokoll.txt" nur "Skriptstart ..." wenn ich während der loop abbreche, also läuft der Skript nicht weiter.
Die Manualseite zu ignore_user_abort besagt, dass PHP den Abbruch der Verbindung nur dann ueberhaupt mitbekommen kann, wenn versucht wird, wieder Daten an den Client zu senden. Das Beispielscript enthaelt keinerlei solchen Versuch, also verstehe ich nicht, welche Aussagekraft es bezueglich des Sachverhaltes ueberhaupt haben soll.
Was macht denn die WhileSchleife deiner Meinung nach? Sie sendet Text bis er nicht mehr ankommt und wenn ignore_user_abort funktionieren würde müsste er im Anschluss an den Abbruch noch etwas in die Datei schreiben - gerade dies geschieht aber nicht.
Horatius
Hi,
Was macht denn die WhileSchleife deiner Meinung nach? Sie sendet Text
Dass das echo nicht zwangslaeufig zu einer Ausgabe an den Client fuehrt, steht ebenfalls auf der verlinkten Seite.
MfG ChrisB
Hi,
Hi,
Dass das echo nicht zwangslaeufig zu einer Ausgabe an den Client fuehrt, steht ebenfalls auf der verlinkten Seite.
MfG ChrisB
Ja das habe ich auch gelesen, es funktioniert aber nicht mit ob_flush() und flush(). Hat vielleicht noch jemand anderes eine Idee?
Gruß
Horatius