• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

4096 bytes an den Browser senden

Splitt3r

New member
Hallo,

ich lasse während dem laden in einer Schleife von PHP per flush() etwas ausgeben. lokal funktioniert das richtig flüssig, auf dem Webserver jedoch nicht, da nach kurzer recherche klar wurde, dass der Browser i.d.r. erst nach 4096 bytes, also 4 kb die erste Ausgabe macht.

Nun meine Frage: Wie kann ich 4096 Bytes an den browser senden ohne per str_pad(" ",4096); reale zeichen zu senden. Gibt es da irgendwie villeicht einen anderen trick?

Viele Grüße
 
ich lasse während dem laden in einer Schleife von PHP per flush() etwas ausgeben. lokal funktioniert das richtig flüssig, auf dem Webserver jedoch nicht, da nach kurzer recherche klar wurde, dass der Browser i.d.r. erst nach 4096 bytes, also 4 kb die erste Ausgabe macht.
Wo hast du recherchiert?
z.b. in der Beschreibung zu flush: http://php.net/manual/de/function.flush.php
Selbst Browser können empfangene Ausgaben puffern bevor sie sie tatsächlich darstellen. Netscape Browser z.B. puffern Text bis sie entweder einen Zeilenwechsel oder den Anfang eines Tags emfangen und zeigen Tabellen erst nach dem Empfang des </table> Tags der äußersten Tabelle.

Einige Versionen des Mircrosoft Internet Explorers beginnen erst dann mit der Ausgabe wenn sie mindestens 256 Bytes empfangen haben. Sie müssen daher eventuell zusätzliche Leerzeichen in Ihre Ausgaben einfügen um eine Darstellung vor Scriptende auf solchen Browsern zu erzwingen.
Da steht nur was von können und von 256 Bytes - aber nur beim ersten Mal und in den Kommentaren wird noch der safari erwähnt, der angeblich 1024 Bytes braucht.

Ich würd statt Leerzeichen vielleicht einfach einen HTML Kommentar senden.
 
Also in alten Themen wird immer von 4096 bytes gesprochen, villeicht sinds auch weniger...

heißt das ich muss 4096 zeichen ausgeben oder besteht ein zeichen aus mehreren bytes? (ich bin da nicht so fit.)
 
Zuletzt bearbeitet:
Also wenn ich nur ein Zeichen ausgeben lasse:

echo "^";
flush();

dann gibt er während dem laden gar nichts aus, sage ich aber:

echo str_pad("^", 8);
flush();

Dann gibt er nach jedem Zeichen einmal aus, sehr komisch.
 
Zuletzt bearbeitet:
Jetzt verstehe ich das ganze erst. man muss !einmalig x bytes ausgeben bevor der browser immer flush anwendet, und ich dachte vor jedem flush() müssen mind. x-bytes ausgegeben werden.
 
also ich kann keine aktuellen Browser finden, wo diese Zahl nötig wären. Bei mir geht es im aktuellen FF sofort ohne Buffern und im IE mit den oben erwähnten 255 Bytes.
 
Ach und was mir noch einfällt - Splitt3r sprach davon, dass es nur auf dem Server nicht funktioniert. Dieser kann natürlich ebenfalls Buffern (z.b. auch wenn gzip aktiviert ist)
 
Zuletzt bearbeitet:
in der php.ini steht output_buffering = Off

Ich habe herausgefunden, dass alles einwandfrei ausgegeben wird wenn ich einmalig zu beginn des scripts 1024 Zeichen ausgebe:

echo str_pad( "", 1024, " " );

Bei 512 funktioniert es bei mir nicht erst bei 1024. Ich nutze den Firefox.
 
ini_set("output_buffering", "4096");
und
ini_set("output_buffering", "off");


hat keinen einfluss,

ini_get('output_buffering')

gibt nichts aus...
 
So ich hab jetzt mal ordentlich gestestet:

Auf 9 von 10 verschiedenen Webservern funktioniert folgender Code:

PHP:
<?php

echo "<!--" . str_repeat(" ", 1024)." -->";

for ($i=0; $i<=10; $i++) {
   echo $i;
   flush();
   sleep(1);
}

?>

doch auf einem Server funktioniert er nicht, da läd er die komplette Seite bevor er die ausgibt.

Das ist zum verrückt werden, phpinfo() gibt auch nichts interessantes aus.output_buffering steht auf den servern entweder auf novalue oder 0 aber es ist nicht so als hätte der Webserver auf dem es nicht funktioniert da was eigenes stehen.

Vielen Dank schonmal für Eure Hilfen...
 
Zuletzt bearbeitet:
Ich zitier mich mal aus dem anderen thread

flush funktioniert außerdem nur wenn php NICHT als fcgi läuft, also muss es bei apache z.b. als mod_php laufen.
d.h. wenn die Seite mal zu einem anderen host umzieht wo php anders konfiguriert ist kanns sein dass es plötzlich nicht mehr funktioniert (dann sieht der user nichts bis alles fertig ist und dann ploppt das komplette ding auf einmal auf)
 
Zurück
Oben