Я пытаюсь сделать системный вызов и отправить каждую строку в браузер в режиме реального времени.
echo('<pre>');
system('ping -c 10 www.google.com');
echo('</pre>);
Это работает, когда я вызываю его из командной строки (каждая строка пинга выводится по одной). Однако это не работает, когда я пытаюсь открыть с помощью браузера (Firefox или Chrome).
Я почти уверен, что это как-то связано с буферизацией вывода, навязанной браузером. Они не будут отображать новые данные, если они не превышают порог цетрена. Решения такого рода проблем обычно включают вывод группы пустых символов, т.е. str_repeat(' ',1024*64)
, Можете ли вы придумать, как браузер отображает вывод в реальном времени?
Так нельзя.
Ваш php-запрос выполняется один раз и повторите один ответ.
Также результат системной функции показывается в конце выполнения вашей команды. В командной строке вы видите только логи команд, а не ваш php-код.
Я предлагаю использовать своего рода технологии длительного опроса или soquet-io для установления непрерывной связи в режиме реального времени с вашим сервером.
<?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;
}
?>