Остановить буферизацию вывода PHP - PullRequest
1 голос
/ 24 июня 2010

Мне нужно отобразить непрерывный вывод из моего PHP-скрипта.Сценарий будет оставаться в цикле печати данных журнала с устройства и сна.Моя проблема в том, что я не могу заставить PHP или Apache выводить данные до завершения сценария.

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

Можно ли это сделать с Apache и PHP на Windows или мне следует рассмотреть какую-то другую платформу?

Ответы [ 3 ]

3 голосов
/ 24 июня 2010

Лучший способ (самый надежный и чистый) для достижения этой цели - использовать серверный скрипт, который выполняет эту работу, и клиентский AJAX-скрипт, который будет опрашивать другой серверный скрипт, который вернет статус. В сети данные буферизуются на разных уровнях для достижения оптимизации, и поэтому трудно выполнить то, что вы хотите.

1 голос
/ 24 июня 2010

Используйте эти команды очистки буфера вывода, которые вы уже использовали, и добавьте комментарий HTML длиной 1024 байта.Это скорее всего проблема с браузером, а не с сервером.

Ааа, похоже, вы ищете приложение COMET

http://www.zeitoun.net/articles/comet_and_php/start

0 голосов
/ 24 июня 2010

PHP output_buffering по умолчанию равен 0 (т.е. отключен), но вы, несомненно, это исследовали.

Я думаю, @ предложение Палантира , вероятно, хорошее: записать записи журнала в локальный файл, а затем передать этот файл (или его части) клиенту; клиент может повторно запросить, как часто вы хотите. Это также имеет то преимущество, что не заполняет буфер браузера (то есть вы не должны просто отправлять данные журнала клиенту до бесконечности ).

Но это был не твой вопрос.

Можете ли вы воспроизвести проблему буферизации вывода с помощью простого скрипта, подобного следующему?

<?php
while (TRUE)
{
    echo 'x';
    flush();
    sleep(1);
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...