关于PHP缓冲控制在IE浏览器下的应用

最近写程序的时候遇到一个问题,就是我用PHP控制浏览器缓冲,试了N次都无法实现想要的效果,具体程序见下面的代码:

<?php
for ($i=0; $i<10; $i++) {
    echo "<BR>".$i;
    flush();
    sleep(1);
}
?>

上面这段程序是实现每隔1秒钟在浏览器上输出一个字符,但实际效果是程序执行完后才把所有字符输出到浏览器上,调试了好几次都不行。在网上搜索了N个技术文章都没有解决这个问题。最后从一篇文章上找到些灵感,那篇文章里写到flush()函数可能在微软IE浏览器的个别版本上不起作用。

于是我用FireFox浏览器试了一下,果然立即出现了想要的效果,我的浏览器是IE6,经过查阅相关资料,得知,IE的某些版本只有在字符串缓冲到256字节的时候才会将缓冲内容输出到浏览器上。

根据这个特点,我修改了一下程序,结果得到了预期的效果,具体代码如下:

<?php
for ($i=0; $i<10; $i++) {
    echo "<BR>".$i.str_repeat(" ",256); //修改
    ob_flush(); //修改
    flush();
    sleep(1);
}
?>

在想要输出的字符串后加上256个空格,使字符串长度达到IE浏览器所规定的缓冲长度,再用ob_flush()函数配合flush()函数来将缓冲内容输出到浏览器上,这样基本上所有的浏览器就都可以正常得到预期的效果了。

这个问题让我捣鼓了2个多小时,该死的微软!!!

经验不敢独享,贴上来和各位一起分享,希望在大家的开发过程中如果遇到类似问题可以帮上忙!

相关内容:

发表评论