sleep flush Browserproblem?
Henry
- browser
- php
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
Hello,
das liegt am Output Buffer. Den musst Du nach dem flush noch gezielt leeren, oder vorher ausschalten.
Glück Auf
Tom vom Berg
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
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