2013-06-25 16 views
5

Jak echo coś dla każdej iteracji następującej pętli:Jak echo wyjście, gdyż jest generowany

<? 
    for($i=0;$i<5;$i++) { 
      // some (slow) logic 
      echo $i; 
    } 
?> 

chciałbym zobaczyć wartość $i wyjścia, jak to działa, jednak ten wysyła nic i następnie 0 1 2 3 4 po wykonaniu skryptu.

+0

Czy wyświetlasz dane wyjściowe na konsoli lub w przeglądarce internetowej? –

+0

Czy nie podałeś odpowiedzi na własne pytanie? – MisterBla

+0

http://php.net/manual/en/function.ob-flush.php komentarz nr 3 – r043v

Odpowiedz

1

Wypróbuj tę. Kluczem jest tutaj ustalenie wartości output_buffering (domyślnie = 4096) dla twojego serwera.

ob_start(); 
$buffer = str_repeat(" ", 4096)."\r\n<span></span>\r\n"; 

for ($i=0; $i<25; $i++) { 
     echo $buffer.$i; 
     ob_flush(); 
     flush(); 
      sleep(1); 
}  

ob_end_flush(); 

http://php.net/manual/en/outcontrol.configuration.php

+0

Próbowałem, ale nadal wykonuje cały skrypt, a następnie wyświetla dane. – vmark99

+0

jaka jest wartość output_buffering na twoim serwerze? Niektóre serwery nie opróżniają ouput, dopóki rozmiar bufora nie zostanie spełniony. –

+0

Jego wartość 4096. Czy mogę to zmienić? – vmark99

-2

Więc zbudować ciąg, to echo ciąg:

$str = ''; 
for($i = 0; $i < 5; $i++) { 
    $str .= $i; 
} 
echo $str; 

Zauważ, że to w praktyce nic nie zmienia. Tak mała pętla zostanie wykonana niemal natychmiast i wyświetlona niemal natychmiast. Jeśli robisz to w kontekście przeglądarki, prawdopodobnie dostaniesz wszystkie cyfry napotykane w jednym pakiecie sieciowym oraz w przeglądarce renderującej/wyświetlającej je jednocześnie.

+1

OP chce wysłać dane wyjściowe po każdej pętli, a nie raz na końcu. "_Jak wywołać ciąg znaków za każdym razem, gdy funkcja kończy pętlę" –

+0

Chociaż nie odpowiada to na pytanie OP, masz dobry punkt: *** "Jeśli robisz to w kontekście przeglądarki," Najprawdopodobniej wszystkie cyfry napotkane w jednym pakiecie sieciowym oraz w przeglądarce będą renderować/wyświetlać je jednocześnie. "*** –

+0

" po tym jak funkcja zakończy pętlę ", co jest dokładnie tym, co robi mój fragment. po zakończeniu pętli echo ciąg znaków. Powiedz mi, jak mój kod jest nieprawidłowy? –

Powiązane problemy