@Sushkov
">alert("yohoho")

Как отключить буферизацию вывода?

У меня PHP-программа, которая должна выдавать сообщения в процессе выполнения.
Например:
for($i = 0;$i<1000;$i++){
echo $i.'<br>';
sleep(10);
}

Но пользователь не видит ни одного сообщения, пока программа не закончится.
Apache выглядит вот так:
<IfModule mod_php5.c>
  php_value output_buffering Off
  php_flag output_buffering Off
</IfModule>

в php фале пробовал так: while (@ob_end_flush());, но не помогло. Как быть?
В php.ini не хотелось бы менять буфер, потому что это нужно сделать всего на нескольких страница и не хочется чтобы другие от этого страдали.
  • Вопрос задан
  • 1679 просмотров
Пригласить эксперта
Ответы на вопрос 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Ответ написан
Комментировать
riky
@riky
Laravel
есть еще кеширование веб сервером.

давно когда делал подобный способ добавлял в вывод 4-8кб доп данных.

for($i = 0;$i<1000;$i++){
  echo $i.'<br>';
  echo '<!--', str_pad('', 8000, ' '), '-->';
  sleep(10);
}


после такого буфера сервера заполняется и даннее отправляются.
главное чтобы этот мусор не мешался на клиенте, в данном случае - добавил их просто в комментарий.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
Кроме уже упомянутого буфера в веб сервере (в случае nginx, если он имеется перед apache конечно, до определенной версии не отключаемого вовсе) есть и буферизация на клиенте. Потому стоит послать пачку пустых данных (в том же IE это было что-то около 2-3кб если не ошибаясь за давностью лет).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы