2010-03-25 5 views
3

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

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

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

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

Благодарим за помощь!

Iain

+0

Я заметил, что на особо длинных скриптов, PHP, кажется, начинают посылать то, что у него есть в буфере, даже если сценарий hasn» t законченное выполнение - любой способ угнать это? –

+0

Хмммм ... как запоздалая мысль - возможно, PHP ** ** фактически посылает буфер, как он идет, и это просто мой браузер, который не показывает его мне ... ermmm .. help ?! –

+0

Вы используете скрипт в консоли? Или в браузере? –

ответ

10

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

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

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

+4

PHP буферизует вывод, на длинных сценариях этот буфер заполняется, поэтому его данные отправляются (вы можете настроить размер буфера или заставить php буферизовать весь вывод перед отправкой) – Michael

+2

Я даю этому тик, потому что он ведет меня на правильный ответ. Любой, кто это делает, обратите внимание: вам нужно установить 'output_buffering' в ваш файл php.ini равным 0, что является хитом производительности, который я могу привести к тому, что он работает для меня, но я скептически отношусь к его использованию в производство. Кроме того, после вызова 'ob_flush()', вам также нужно вызвать 'flush()' для отправки вывода. Надеюсь это поможет! –

0

Вы можете исследовать флеш команды http://php.net/manual/en/function.flush.php

+0

, потому что вывод буферизирован и не обязательно будет выводиться при выводе оператора echo. –

1

Вы можете попробовать использовать flush и посмотреть на другой output control functions, но они могут быть бесполезны. Программное обеспечение вашего веб-сервера может задерживать ответ независимо от него.