background image

<?php
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
    echo $i;
    ob_flush();
    sleep(1);
}
?>

<?php
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
    echo $i;
    sleep(1);
}
?>

请注意看上面的 ob_implicit_flush(true),这个函数强制每当有输出的时候,即刻把输出发
送到浏览器。这样就不需要每次输出(echo)后,都用 flush()来发送到浏览器了。

以 上 所 诉 可 能 在 某 些 浏 览 器 中 不 成 立 。 因 为 浏 览 器 也 有 自 己 的 规 则 。 我 是 用
Firefox1.5,IE6,opera8.5 来测试的。其中 opera 就不能正常输出,因为它有一个规则,就是
不遇到一个 HTML 标签,就绝对不输出,除非到脚本结束。而 FireFox 和 IE 还算比较正常
的。

最后附上一段非常有趣的代码,作者为 PuTTYshell。在一个脚本周期里,每次输出,都会
把前一次的输出覆盖掉。
以下代码只在 firefox 下可用,其他浏览器并不支持 multipart/x-mixed-replace 的 Content-
Type.

<?php
  header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
  print "\n--endofsection\n";

  $pmt = array("-", "\\", "|", "/" );
  for( $i = 0; $i <10; $i ++ ){
     sleep(1);
     print "Content-type: text/plain\n\n";
     print "Part $i\t".$pmt[$i % 4];
     print "--endofsection\n";