Используя flush
и / или ob_flush
, вы должны получить то, что хотите.
Вот быстрая демонстрация:
for ($i=0 ; $i<10 ; $i++) {
echo "$i<br />";
ob_flush();
flush();
sleep(1);
}
Каждую секунду номер будет отправляться в браузер, не дожидаясь окончания цикла / сценария.
(без учета сброса и ob_flush
, он ожидает до конца скрипта, чтобы отправить вывод)
Объяснение того, зачем вам нужны оба, цитата со страницы сброса в руководстве:
Очищает буферы записи PHP и
какой бы серверный PHP ни использовал (CGI,
веб-сервер и т. д.). Это попытки
протолкнуть токовый выход до
браузер с несколькими оговорками.
flush () не может переопределить
схема буферизации вашего веба
сервер, и это не влияет на любой
буферизация на стороне клиента в браузере.
Это также не влияет на пользовательское пространство PHP
механизм буферизации вывода. Это означает
вам придется вызвать оба ob_flush ()
и flush () для очистки вывода ob
буферы, если вы их используете.
Если это не сработает для вас, взгляните на комментарии на двух страницах руководства и получите несколько советов о том, «почему это может не сработать»