flush()+sleep() heben Timeout auf ?
Nicole
- php
Hallo erst mal ;-)
Ich nutze gerne die Funktion sleep bzw. usleep()in Kombi
mit flush() natürlich.
Dies hat den Vorteil, dass ich bei längeren Prozessen
nicht auf eine leere Seite schauen muss.
Auch nutze ich dies bei grossem Mailversand.
Die Frage:
Bisher hatte ich keine Probleme damit,
denn es ensteht kein timeout, was ohne sleep
allerdings passiert.
So habe ich mal eine Schleife zum testen erzeugt
die selbst nach 15 Min. nicht abgebrochen ist.
Der Server schaufelte weiter fleissig Daten zum Browser.
Da ich im Netz keinen Hinweis darauf gefunden habe
stellt sich die Frage ?
Ist darauf Verlass dass der Timeout ausbleibt
und WARUM ?
Gruss Nikki.
Moin,
Ist darauf Verlass dass der Timeout ausbleibt
und WARUM ?
Der Timeout schlägt (zumindest auf Unix-Systemen) nur auf die verbrauchte CPU-Zeit an. Wenn dein Prozess schläft, dann verbraucht er logischerweise auch keine CPU-Zeit, also kann der Timeout nicht anschlagen.
Den Kommentaren auf http://www.php.net/manual/de/function.set-time-limit.php zufolge ist das aber auf Windows-Systemen anders und da zählt tatsächlich die Zeit die die Wanduhr anzeigt. Ich kann das in Ermangelung einer WinDOSe aber jetzt nicht überprüfen.
Hallo Henryk,
Der Timeout schlägt (zumindest auf Unix-Systemen) nur auf die verbrauchte CPU-Zeit an. Wenn dein Prozess schläft, dann verbraucht er logischerweise auch keine CPU-Zeit, also kann der Timeout nicht anschlagen.
Hmmm, dann hatte ich wohl bisher nur Glück.
Kann es sein, dass ich durch die Sleeps beim Mailversand
eine schnellerer Abarbeitung des einzelnen Mailbefehls
in einer Schleife erziele, als wenn ich sie alle direkt hintereinander ohne Pause durchjage.
Könnte vielleicht der Grund sein, aber nichts desto Trotz
weiss ich jetzt wenigstens dass darauf kein Verlass ist ;-)
Danke Henryk.
Gruss Nikki
Hallo Henryk,
ich hab noch mal experimentiert ;-)
Es liegt nicht an sleep()
sondern an flush und daran, dass weiterhin Daten zum Browser geschaufelt werden.
(KOMISCH DASS DESHALB TIMOUT NICHT AKTIV WIRD...)
Mal ein Script:
Beide Varianten fast identisch mit einer Ausnahme:
Beim (mit Timeout) macht der Server winzig kleine Pausen
beim senden an den Browser, fast nicht sichbar, aber dennoch
Grund genug nach 30 Sek. den Tiomout zu realisieren.
<?PHP
$s=time();
if($tout){
echo"<h5>COUNTDOWN Timeout nach 30 sek. </h5>";
for($x=1;$s >(time()-120);$x++){if(($x%10000)==0)
{echo "$x\r\n";flush();}}
}elseif($notout){
echo"<h5>COUNTDOWN Timeout nicht vorhanden </h5>";
for($x=1;$s >(time()-120);$x++){echo".";if(($x%100000)==0){echo "<br>$x<br>\r\n";}flush();}
}
echo"<h5>LAUFZEIT DIESER SEITE: ".(time()-$s)." Sekunden</h5>";
?>
<a href="sleeptest.php?tout=1">sleep mit timeout</a>
<a href="sleeptest.php?notout=1">sleep ohne timeout</a>
EOF
?>
WIE KOMMT DAS BLOSS ?
Gruss Nikki