Hello,
Da der Webserver einen internen Puffer hat, um nicht jedes von PHP oder anderen eingebundenen Modulen erzeugte Byte einzeln zum Client zu befördern, muss man den Webserver explizit bitten, wenn man dies doch haben möchte. Die PHP-Funktion dazu heißt flush(). Allerdings funktioniert dieser Mechanismus nicht mit allen Webservern. Und auch die Browser können dem Verlangen entgegenstehen, denn die können manchmal nicht sofort losrendern, wenn denen wesentliche Informationen fehlen, beispielsweise zur Struktur einer Tabelle.
Mit flush() wird aber mMn nur der Ausgebepuffer von PHP geleert. Der Webserver kann noch einen eigenen haben, den er erst leert, wenn er ein IP-Paket "voll" bekommt oder wann auch immer (IP ist ja schon wieder eine andere Schicht...). Irgendjemand hier im Forum hat mal herausgefunden, dass man in solchen Fällen seine Ausgaben einfach mit einem Bündel Leerzeichen auf ca. 512 Zeichen auffüllen soll und dann erst den Buffer flushen. HTML ignoriert diese in der Anzeige, den Traffic interessierts bei eingeschalter Kompression auch nicht sonderlich, aber die Bucket Chain aus Buffers lässt sich damit einigermaßen manipulieren.
Und PHP macht beim Flushen von STDOUT manchmel nicht mit, wenn noch andere Buffers (Dateiausgaben) zur Ausgabe gefüllt wurden. Woran das liegt, habe ich noch nicht herausgefunden.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg