2013-06-25 2 views
5

Как я эхо что-то для каждой итерации следующего цикла:Как эхо выхода, как это генерируется

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

Я хотел бы видеть значение $i продукции, как это работает, но это не выводит ничего и затем 0 1 2 3 4 после выполнения сценария.

+0

Вы просматриваете вывод на консоли или в веб-браузере? –

+0

Разве вы не дали свой собственный ответ в своем собственном вопросе? – MisterBla

+0

http://php.net/manual/en/function.ob-flush.php comment # 3 – r043v

ответ

1

Попробуйте этот. Ключ здесь - знать, какое значение output_buffering (default = 4096) было установлено для вашего сервера.

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

Пробовал это, но он все еще выполняет весь скрипт, а затем отображает данные. – vmark99

+0

Какова ценность output_buffering на вашем сервере? Некоторые серверы не будут выгружать вывод до тех пор, пока размер буфера не будет удовлетворен. –

+0

Его на 4096. Должен ли я его изменить? – vmark99

-2

Так построить строку, а затем повторить строку:

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

Обратите внимание, что это, на практике, ничего не меняет. Такая крошечная петля будет выполняться почти мгновенно и отображать почти мгновенно. Если вы делаете это в контексте браузера, вы, вероятно, получите все цифры, встречающиеся в одном сетевом пакете, а также отображение и отображение браузера одновременно.

+1

OP хочет отправить вывод после каждого цикла, а не один раз в конце. «Как я повторяю строку каждый раз, когда функция завершает цикл» –

+0

Хотя это не отвечает на вопрос OP, у вас есть хорошая точка: *** «Если вы делаете это в контексте браузера, Вероятно, все цифры будут отображаться в одном сетевом пакете, а рендеринг и отображение браузера одновременно. *** –

+0

«после того, как функция завершит цикл», что и делает мой фрагмент. после завершения цикла он перебирает строку. Скажите, как мой код ошибочен? –