Печать результатов сразу (php) - PullRequest
12 голосов
/ 01 сентября 2009

У меня есть скрипт php, который соединяет 10 разных серверов для получения данных. Я хочу, чтобы он напечатал результаты 1-го соединения, прежде чем начнется второе.

Ответы [ 3 ]

26 голосов
/ 01 сентября 2009

Используя 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 буферы, если вы их используете.


Если это не сработает для вас, взгляните на комментарии на двух страницах руководства и получите несколько советов о том, «почему это может не сработать»

2 голосов
/ 01 сентября 2009

ob_end_flush http://us.php.net/ob_end_flush

Эта функция очищает выходной буфер и отключает выходную буферизацию. Все, что после этой функции отправляется в браузер немедленно.

0 голосов
/ 01 сентября 2009

Да, ob_flush должен это сделать. Я делаю это все время на странице LOOONG, когда я хочу наблюдать за ходом операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...