|
|
|
| Ситуация: определенные скрипты ведут обработку в циклах или в итерациях. Зачастую эта обработка является длительной и необходимо отслеживать, на каком этапе находится обработка.
Попытки вывода сообщений не дают должного результата - сервер выдает сразу все сообщения после окончания работы скрипта. Поэтому приходится при явных итерациях запускать цикл таким образом, чтобы скрипт делал редирект на себя. В этом случае всегда выводится своевременная информация мониторинга.
Но такую возможостость обеспечить в каждом цикле нельзя.
Есть ли в PHP команды или способы, вынуждающие сервер послать клиенту информацию до окончания работы скрипта? | |
|
|
|
|
|
|
|
для: ДацкыйКот
(19.05.2008 в 03:26)
| | flush() ? | |
|
|
|
|
|
|
|
для: ДацкыйКот
(19.05.2008 в 03:26)
| | Да, может запускать скрипты без участия сервера? | |
|
|
|
|
|
|
|
для: Poison
(19.05.2008 в 09:12)
| | попробовал позапускать flush, ob_flush.. не работает (( не очень догоняю почему.. хотя по идее вот тут http://www.phpclub.net/manrus/f/flush.html
говорят, что апач все равно все буферит до окончания работы скрипта. так же поступают и браузеры.. так что не смог их преодолеть..
есть еще опция в php.ini, которая стоит в off, но ее включение не рекомендуется - пишут что возможны серьезные проблемы с производительностью в дальнейшем..
а как можно запустить скрипт без участия сервера? %( я так понимаю что апач с пхпэшным расширением обрабатывает пхп скрипт и генерит ответ браузеру... есть какая-то другая схема что ли? | |
|
|
|
|
|
|
|
для: ДацкыйКот
(19.05.2008 в 03:26)
| | firefox + flush()
Вот пример:
<?
for ($i = 0; $i < 10000; $i ++) {
flush();
echo $i.'<br />';
flush();
}
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(19.05.2008 в 16:58)
| | . | |
|
|
|
|
|
|
|
для: mihdan
(19.05.2008 в 16:58)
| | крута... спасибо...
в Опере тоже все отрабатыывается... в ИЕ - нет.
я правда слегка модифицировал, чтобы больше были паузы между циклами:
for ($i = 0; $i < 10; $i ++) {
flush();
usleep(300000);
echo $i.'<br />';
flush();
}
|
| |
|
|
|
|
|
|
|
для: ДацкыйКот
(19.05.2008 в 03:26)
| | в php.ini
implicit_flush = On
output_buffering = On
|
| |
|
|
|
|
|
|
|
для: mihdan
(19.05.2008 в 17:40)
| | а этот комментарий перед директивой implicit_flush вас не насторожил?
;Turning this option on has serious performance implications and is generally recommended for debugging purposes only.
implicit_flush = Off | |
|
|
|
|
|
|
|
|
для: mihdan
(20.05.2008 в 14:39)
| | хм.. и где же там аргументы в пользу оправданности таких настроек? там лишь дословный перевод камента из php.ini: "При использовании PHP в пределах среды сети, включение этой опции влечет за собой уменьшение производительности, и вообще данная опция рекомендуется только для отладки."
поскольку локалхост обычно перегружен обработками и загрузками, пока принял решение выводить сообщения в течение работы скрипта явным вызовом функции flush в ограниченном количестве случаев.. | |
|
|
|