为什么我需要`str_pad('',4096)`来使PHP刷新工作?

Ori*_*iol 2 php flush

例如,

这不起作用(Firefox 21,IE8):

<?php
function flush_buffers(){
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();
}  
ob_start();
echo 'Text 1<br />';
flush_buffers();
Sleep(2);
echo 'Text 2<br />';
flush_buffers();
Sleep(2);
echo 'Text 3<br />';
flush_buffers();
Sleep(2);
echo 'Text 4<br />';
?>
Run Code Online (Sandbox Code Playgroud)

但是这个有效:

<?php
function flush_buffers(){
    echo str_pad('',4096);
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();
}  
ob_start();
echo 'Text 1<br />';
flush_buffers();
Sleep(2);
echo 'Text 2<br />';
flush_buffers();
Sleep(2);
echo 'Text 3<br />';
flush_buffers();
Sleep(2);
echo 'Text 4<br />';
?>
Run Code Online (Sandbox Code Playgroud)

我在Win XP SP3上运行PHP 5.4.11 VC9和Apache 2.4.3(apacheLounge).

Nie*_*sol 5

有些浏览器包含自己的内部缓冲区,以便更有效地下载和显示,而且不那么紊乱.在大多数情况下,此缓冲区为4Kb或4096字节.

什么str_pad('',4096)是输出4,096个空格.由于它是HTML,因此这些空间会折叠成一个空格.

总的来说,不应该依赖这种行为.浏览器用于查看网页,而不是混入控制台终端.

另外,你为什么写作</br>?没有结束<br>标记这样的东西,而自闭版本则是<br />