Есть ли способ заставить PHP постепенно выводить данные при выполнении скрипта? - PullRequest
4 голосов
/ 25 марта 2010

Итак, я пишу одноразовый сценарий для личного личного использования и хочу увидеть, как идет процесс. В основном я обрабатываю пару тысяч медиа-релизов и отправляю их на нашу новую CMS.

Так что я не забиваю CMS, я делаю скрипт sleep на пару секунд после каждых 5 запросов.

Я бы хотел - во время выполнения сценария - видеть, как мои echo сообщают мне, что сценарий переходит в спящий режим или что последняя транзакция с веб-сервисом прошла успешно.

Возможно ли это в PHP?

Спасибо за вашу помощь!

Иэн

Ответы [ 4 ]

11 голосов
/ 25 марта 2010

Используйте ob_flush для отправки любых данных в буфер. Таким образом, вы можете выполнить некоторые команды, очистить вывод, а затем немного поспать, прежде чем обрабатывать другие команды.

Я замечаю, что на особенно длинных сценариях PHP, похоже, начинает отправлять то, что у него есть в буфере, даже если сценарий еще не завершил выполнение

По умолчанию PHP никогда ничего не отображает, пока не завершится выполнение всего скрипта. Это просто ваш браузер пытается вывести слишком много данных за один раз, или у вас есть что-то, что заставляет его где-то сбрасываться.

2 голосов
/ 14 августа 2015

Вот пакет PHP, который оборачивает его:

https://packagist.org/packages/coderofsalvation/browser-stream

   BrowserStream::enable();
    BrowserStream::put("loading");

    for( $i = 0; $i < 10; $i++ ){
        BrowserStream::put(".");
        sleep(1);
    }
2 голосов
/ 25 марта 2010

Вы можете попробовать использовать flush и взглянуть на другие функции управления выводом , но они могут быть бесполезны. Программное обеспечение вашего веб-сервера может буферизовать ответ независимо.

0 голосов
/ 25 марта 2010

Возможно, вы захотите изучить команды сброса http://php.net/manual/en/function.flush.php

...