Hello,
MaxExecutionTime fängt bei allen mir bekannten PHP-Versionen nch einem Sleep() von vorne an zu zählen. Ich habe ein "user_abort-script" auf diese Weise schon 10 Tage laufen lassen.
Das bestreite ich nicht.
Was ich bestreite: Wenn mail() es schafft, innerhalb einer max-execution-time angenommenene 480 Mails sauber und ohne false-Rückgabe zu versenden und dann ins Timeout läuft, bringt es wenig, ein sleep(1) auszuführen, sobald mail() ein false zurückgibt - weil dieser Fall ja gar nicht eintritt und auch nie eintreten soll, weil er deutlich anzeigt, dass mit dem Mailversand irgendwas nicht klappt - und zwar grundsätzlich nicht!
Wenn also längere Laufzeiten benötigt werden, dann muß man dafür sorgen, dass sleep() regelmäßig ausgeführt wird, und nicht nur bei einem nach Definition möglichst gar nicht eintretenden Event.
Ja, da hast Du recht.
Man muss sleep() in jedem Schleifendurchlauf ausführen und ggf. dann etwas unternehmen, wenn mail() dauerhaft false liefert. Ich habe es wohl genau falsch herum beschrieben. Das false von mail() aber zu ignorieren, würde den Mailserver irgendwann killen, sofern der überhaupt erreicht wird.
Außerdem sollte das Script auch selber auf seine Ausführungszeit achten, also sich den Start merken und die aktuelle Laufzeit prüfen. Und wenn es dann noch mit einer Registrierfunktion (pid) versehen wird und eine register_shutown_function() für das "Deregistitrieren" bekommt, weiß man auch, ob es noch läuft oder fertig ist.
http://de2.php.net/manual/de/function.getmypid.php
http://de2.php.net/manual/de/function.register-shutdown-function.php
http://de2.php.net/manual/de/function.ignore-user-abort.php
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen