2016-05-07 7 views
1

Ich stoße auf ein Problem, bei dem bestimmte Browser (durch die ich mehrere Computer benutze) scheinbar PHP anders verarbeiten/anzeigen. Sagen wir, ich habe folgende Schleife auf test.phpEinige Browser-Seiten laden nur, nachdem alles PHP verarbeitet wurde

<?PHP 
for($i=0;$i<10000;$i++){ 
    echo "This is loop number $i.<br/>"; 
} 
>? 

Was Ich mag würde, um zu sehen, wenn ich test.php laden für jede Zeile ist von „Dies ist Loopnummer #“ zu einer nach dem anderen als PHP erscheinen wird bearbeitet.

Was ich in einigen Browsern sehe (hauptsächlich Firefox auf meinem Hauptcomputer) ist, dass test.php geladen wird (nichts anzeigt) und dann endlich mit allen bereits vorhandenen Echozeilen öffnet.

Gibt es eine Möglichkeit, den Browser (oder die Webseite) dazu zu zwingen, das PHP so anzuzeigen, wie es weitergeht, anstatt darauf zu warten, dass es vervollständigt wird?

Vielen Dank für jede Hilfe/Beratung,

Ronan

+0

Ich kann das Problem mit Firefox und Edge, Opera und Chrom die Ausgabe sofort bestätigen. Überprüfen Sie diese Antwort, um zu verstehen, warum http://stackoverflow.com/a/6926886/797495 –

+0

Ich habe einen Blick auf das, aber auch mit den Headern Firefox und Chrome immer noch nicht laden die Seite, wie das PHP voran. – Ronan

Antwort

0

ein different answer Zitiert:

Die HTML5-charset Sniffing Puffergröße beträgt 512 Byte. So muss die Antwort entweder 512 Bytes Padding haben oder einen Zeichensatz setzen (über Tag oder HTTP-Header).


kann ich bestätigen die verzögerte Ausgabe geschieht auf Firefox und Edge, Chrome und Opera Ausgang der Inhalt sofort, unabhängig von der Puffergröße.

Der Code Balg Ausgänge in Echtzeit auf allen Browsern, solange die str_pad Größe > 1024 (dieser Wert kann nach Browser unterscheiden)

while (@ob_end_flush()); 
ob_implicit_flush(true); 
echo "first line visible to the browser"; 
echo str_pad("",1024," "); // try lower values and the "first line" won't be displayed instantly 
echo "<br />"; 
sleep(5); 
echo "second line visible to the browser after 5 secs"; 

php.ini Auszug:

output_buffering 

; Die Ausgabepufferung ist ein Mechanismus zum Steuern, wie viele Ausgabedaten ; (ohne Header und Cookies) PHP sollte intern bleiben, bevor drängen; Daten an den Kunden. Wenn die Ausgabe Ihrer Anwendung diese Einstellung überschreitet, wird PHP; sendet diese Daten in Blöcken von ungefähr die Größe, die Sie angeben. ; Das Aktivieren dieser Einstellung und das Verwalten der maximalen Puffergröße kann einige ergeben; interessante Nebenwirkungen abhängig von Ihrer Anwendung und Webserver. ; Sie können möglicherweise Header und Cookies senden, nachdem Sie bereits die Ausgabe gesendet haben; durch drucken oder echo. Sie können auch Leistungsvorteile sehen, wenn Ihr Server ist; weniger Pakete aufgrund gepufferter Ausgabe im Vergleich zu PHP-Streaming ausgeben die Ausgabe; wie es geht. Auf Produktionsservern ist 4096 Byte eine gute Einstellung für die Leistung; Gründe dafür. ; Hinweis: Die Ausgangspufferung kann auch über die Ausgangspuffersteuerung gesteuert werden; Funktionen. ; Mögliche Werte:; Ein = Aktiviert und Puffer ist unbegrenzt.(Verwenden Sie mit Vorsicht); Aus = Deaktiviert; Integer = Aktiviert den Puffer und setzt seine maximale Größe in Bytes. ; Standardwert: Aus; Entwicklungswert: 4096; Produktionswert: 4096; http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering

Sie möchten

output_buffering = off 

Aber Ihre Server Leistung kann leiden, um zu versuchen.

+0

Ich habe versucht, sowohl die Headerkriterien hinzuzufügen als auch den von Ihnen angegebenen Code auszuführen. Sowohl die Seiten, die ich gerade anschaue, als auch dieses Test-Snippet werden nur geladen, nachdem alles verarbeitet wurde. Dies gilt für Chrome und Firefox. Ich möchte klarstellen, dass dies nur mich als Administrator betrifft, niemand wird jemals diese Seiten sehen; Wenn also ein clientseitiger "Hack" möglich ist, würde das auch funktionieren. – Ronan

Verwandte Themen