У меня есть php-скрипт, который соединяет 10 разных серверов для получения данных. Я хочу, чтобы он печатал результаты 1-го соединения до начала второго.
Используя 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_end_flush http://us.php.net/ob_end_flush
Эта функция опустошает выходной буфер и отключает буферизацию вывода. Все после этой функции сразу же отправляется в браузер.
Да, ob_flush должен это сделать. Я делаю это все время на странице LOOONG, когда хочу посмотреть ход выполнения операции.