php 实时输出system()

php output system() in real time

我正在尝试进行系统调用并将每一行实时发送到浏览器

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

当我从命令行调用它时它起作用了(ping 的每一行一次输出一个)。但是,当我尝试使用浏览器(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;
}

?>