浏览器之家


IE浏览器下PHP缓冲控制的问题

写程序的时候遇到一个问题,就是我用PHP控制浏览器缓冲,代码在IE6浏览器上试了N次都无法实现想要的效果,但是在火狐浏览器下却可以实现,后来又去IE8浏览器上测试了一下,IE8的输出也没有问题的,看是只有IE6没有办法正常执行代码。不得不说为什么每次都是IE6的问题呢?具体程序见下面的代码:

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

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

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

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

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

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

这个问题让我捣鼓了2个多小时,诶,IE6让我怎么才能不放弃你呢!

虽然这个问题看似小问题,但是有时候却会困扰我们很久,有了这次经验不敢独享,贴上来和各位一起分享,希望在大家的开发过程中如果遇到类似问题可以帮上忙!

评论

没安装畅言模块