2011-06-18 20 views
6

Więc robię trochę eksperymentów z PHP/Apache. Powiedzmy, że mam ten kod.PHP echo treści podczas ładowania strony

<div>DIV 1</div> 
<?php sleep(2); ?> 
<div>DIV 2</div> 
<?php sleep(2); ?> 
<div>DIV 3</div> 
<?php sleep(2); ?> 
<div>DIV 4</div> 
<?php sleep(2); ?> 

Z jakiegoś powodu na moim lokalnego serwera www apache wszystkie dane pojawia się w przeglądarce na raz, gdy wszystkie 4 sleep() s zostały wykonane (8 sekund).

Jednak jeśli uruchomię go na serwerze mojego hosta, dane są przesyłane do przeglądarki w czasie rzeczywistym. Jak w ... pojawia się div1, po 2 sekundach pojawia się div 2 itd.

Dlaczego tak jest? Czy to jakieś ustawienie w Apache?

+0

To buforowanie i buforowanie przez kilka warstw i urządzeń, które można i nie powinno próbują kontrolować na każdym dużym stopniem pewności. –

Odpowiedz

6

Nie może to być ustawienie w php.

Na twoim lokalnym serwerze, output_buffering jest włączony w twoim pliku php.ini.

Można ją wyłączyć przez ustawienie:

output_buffering = off 

Aby upewnić się, że zawartość jest wysyłana do przeglądarki za każdym razem oświadczenie echo-jak jest używany, należy dodać:

implicit_flush = on 

Można również ustaw rozmiar bufora, podając output_buffering wartość.

output_buffering = 4096 

tutaj rozmiar bufora będzie 4KB.

Buforowanie wyjściowe mówi php, aby zachować w pamięci wszystkie dane, które mają zostać przesłane do przeglądarki, dopóki nie zaimplementuje instrukcji flush() w kodzie, bufor się zapełni lub jest koniec skryptu.

Oto pełne odniesienie do bufora wyjściowego z php.net: php output buffer

+0

@ dader51: Masz na myśli 4Kio? –

+0

oh przepraszam, mój angielski! Miałem na myśli 4KB. – dader

+0

Masz właściwe buforowanie wyjściowe było włączone. Wyłączyłem go, ale nadal robi to samo. Jakieś inne pomysły? – John

Powiązane problemy