Henry: sleep flush Browserproblem?

Hallo,

vor Jahren hatte ich mal ein Script geschrieben, dass eine verzögerte Darstellung im Browser erzeugte. Genauer gesagt war das eine Abfolge von Aktionen. Da ich das Script leider nicht mehr finde, wollte ich das noch mal nachbauen.

echo '<h1>test1</h1>';
usleep(2000000);

echo '<h1>test2</h1>';
usleep(2000000);

echo '<h1>test3</h1>';
usleep(2000000);  

Der gewünschte Effekt, denn ich von früher kannte, setzt aber nicht ein. Also dass die einzelnen Überschriften zeitversetzt (hintereinander) im Browser auftauchen. Jetzt frage ich mich natürlich, was ich früher wohl anders gemacht habe, denn da funktionierte das definitiv. Habe auch schon probiert auf jedes echo ein flush() folgen zu lassen, genauso wie auch anstatt usleep sleep zu nutzen, weil geht ja laut doku mittlerweile auch unter windows, aber alles ohne Erfolg. Nicht falsch verstehen, natürlich könnte ich das auch mit JS oder sonstwas machen, aber mir geht es darum zu wissen wieso es nicht mehr mit php geht, bzw. was ich vielleicht falsch mache?

Auch Beispiele im Netz zeigen das gleiche Verhalten, zwar funktioniert sleep aber es kommt vorher zu keiner Ausgabe. Erst nach Abarbeitung aller Sachen alles auf einmal.

Gruss
Henry

--
Meine Meinung zu DSGVO & Co:
„Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
  1. Hello,

    das liegt am Output Buffer. Den musst Du nach dem flush noch gezielt leeren, oder vorher ausschalten.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo TS,

      das liegt am Output Buffer. Den musst Du nach dem flush noch gezielt leeren, oder vorher ausschalten.

      neee, habe ich doch alles schon probiert. Sogar direkte PHP Einstellungen:

      ini_set('output_buffering', 'off');
      ini_set('zlib.output_compression', false);

      Gruss
      Henry

      --
      Meine Meinung zu DSGVO & Co:
      „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
    2. Hallo TS,

      das liegt am Output Buffer. Den musst Du nach dem flush noch gezielt leeren, oder vorher ausschalten.

      Vielleicht hast du doch nicht ganz unrecht.

      Es funktioniert durch das Ausschalten, aber auf eine extrem unerwartete Art. Zu Beginn muss man ob_end_flush() eingeben, obwohl (und im völligen Widerspruch zum Manual "...Der Ausgabepuffer muss durch ob_start() mit den PHP_OUTPUT_HANDLER_FLUSHABLE und PHP_OUTPUT_HANDLER_REMOVABLE Flags aktiviert werden. Andernfalls funktioniert ob_end_flush() nicht. ...") komplett ohne ob_start(). Ja sogar im Gegenteil, mit ob_start() funktioniert es nicht.

      Aber egal, so funktioniert es jetzt wieder wie gewollt:

      <?php
      ob_end_flush();
      
      
      echo '<h1>test1</h1>';
      sleep(1);flush();
      echo '<h1>test2</h1>';
      sleep(1);flush();
      echo '<h1>test3</h1>';
      sleep(1);flush();
      ?> 
      

      Gruss
      Henry

      --
      Meine Meinung zu DSGVO & Co:
      „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“