Есть ли способ заставить PHP постепенно выводиться по мере выполнения скрипта?
Итак, я пишу одноразовый сценарий для своего личного одноразового использования, и я хочу видеть, как идет процесс. В основном я обрабатываю пару тысяч пресс-релизов и отправляю их на нашу новую CMS.
Поэтому я не забиваю CMS, я делаю скрипт sleep
в течение пары секунд после каждых 5 запросов.
Я хотел бы - по мере выполнения сценария - видеть, как мои echo
сообщают мне, что сценарий переходит в спящий режим или что последняя транзакция с веб-сервис прошел успешно.
Возможно ли это в PHP?
Спасибо за вашу помощь!
Иэн
4 answers
Используйте ob_flush
для отправки любых данных в буфер. Таким образом, вы можете выполнить некоторые команды, очистить вывод, а затем немного поспать, прежде чем обрабатывать другие команды.
Я замечаю, что в особенно длинных сценариях PHP, похоже, начинает отправлять то, что у него есть в буфере, даже если сценарий еще не закончил выполнение
По умолчанию PHP никогда не будет воспроизводить что-либо, пока весь скрипт не завершит выполнение. Это просто ваш браузер пытается вывести слишком много данных в один раз, или у вас есть что-то, что заставляет его где-то смываться.
Вы можете попробовать использовать сброс и посмотреть на другие функции управления выводом , но они могут оказаться бесполезными. Программное обеспечение вашего веб-сервера может буферизировать ответ независимо от этого.
Вот пакет PHP, который завершает его:
Https://packagist.org/packages/coderofsalvation/browser-stream
BrowserStream::enable();
BrowserStream::put("loading");
for( $i = 0; $i < 10; $i++ ){
BrowserStream::put(".");
sleep(1);
}
Возможно, вам захочется изучить команды очистки http://php.net/manual/en/function .flush.php