Nicole: flush()+sleep() heben Timeout auf ?

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.

  1. 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.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    1. 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

    2. 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