firefox — система вывода php () в режиме реального времени

Я пытаюсь сделать системный вызов и отправить каждую строку в браузер в режиме реального времени.

echo('<pre>');
system('ping -c 10 www.google.com');
echo('</pre>);

Это работает, когда я вызываю его из командной строки (каждая строка пинга выводится по одной). Однако это не работает, когда я пытаюсь открыть с помощью браузера (Firefox или Chrome).

Я почти уверен, что это как-то связано с буферизацией вывода, навязанной браузером. Они не будут отображать новые данные, если они не превышают порог цетрена. Решения такого рода проблем обычно включают вывод группы пустых символов, т.е. str_repeat(' ',1024*64), Можете ли вы придумать, как браузер отображает вывод в реальном времени?

0

Решение

Так нельзя.
Ваш php-запрос выполняется один раз и повторите один ответ.

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

Я предлагаю использовать своего рода технологии длительного опроса или soquet-io для установления непрерывной связи в режиме реального времени с вашим сервером.

1

Другие решения

<?php
// WARNING : this define depends from web browser
//           Google Chrome     => 1024
//           Mozilla Firefox   => 2048 (not sure)
//           Internet Explorer => Much more ... but works :)
define ("NUMBER_BYTE_PADDERS", "1024" );

ob_implicit_flush(1);
print padder ("first message") . "<br />";

sleep (5);
print padder ("second message after 5 seconds") . "<br />";

sleep (10);
print padder ("third message after 15 seconds") . "<br />";


function padder ($msg) {
for ($i=0 ; $i < NUMBER_BYTE_PADDERS ; $i++) {
$msg .= ' ';
}
return $msg;
}

?>

0