@John-Galt

Почему не работает функция flush()?

Не работает функция flush(). Я рассчитываю, что каждую секунду в окно браузера будут последовательно выводиться числа, но при этом сразу отрабатывает скрипт, и только после этого все выбрасывается пачкой в окно браузера.
Функция ob_implicit_flush() в начале скрипта не помогает. Сервер nginx.
В чем может быть проблема и как ее решить?

Пример кода:
<?php
echo "<h3>Please waiting for 10 seconds...</h3>";

for ($i = 1; $i <= 10; $i++) {
	echo $i . '<br>';
	flush();
	sleep(1);
}

echo "<h3>Thx!</h3>";
exit;
?>
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
Комментировать
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
если коротко - использовать флаш кака, и есть куча мест где вывод еще буферизуется, начиная от браузера и заканчивая настройками кеширования/буферизации/метода сжатия вебсервера.
Ответ написан
Комментировать
Adamos
@Adamos
> Я рассчитываю, что каждую секунду в окно браузера будут последовательно выводиться числа

Имхо, это дурь с самого начала. В смысле - ожидание от PHP интерактива. Хотите, чтобы на странице что-то менялось - AJAX к вашим услугам. А задача РНР - сформировать вывод как можно быстрее и закончить работу. Потому что дальше - неизвестные задержки по дороге к пользователю, неизвестно что у него в браузере и прочая неизвестность. В которую впутывать серверные скрипты совершенно незачем.
Ответ написан
@AlexanderZe
Интересующийся
А если так?
echo "<h3>Please waiting for 10 seconds...</h3>";

ob_implicit_flush(1);

for($i=0; $i<10; $i++){
    echo $i . '<br>';
    echo str_repeat(' ',1024*64);

    sleep(1);
}

echo "<h3>Thx!</h3>";
exit;
Ответ написан
Ваш ответ на вопрос

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

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