比如:
<?php /** Server:LightTPD/1.4.28 (Win32) X-Powered-By:PHP/5.3.27 */ echo '佛法无边'."<BR>"; ob_flush(); flush(); sleep(1); echo '法轮常转'; //output
上面的代码 在 chrome 浏览器上面 是一行一行的输出,在ie系列的浏览器则是全部输出。其实就是上面的 第四条一些浏览器只有当接收256个字符才开始显示。把上面的代码改成下面形式:
<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo str_pad('',240)."n";
echo '佛法无边'."<BR>";
ob_flush();
flush();
sleep(1);
echo '法轮常转';
//output
这样在ie下面就会一行一行输出,因为超过256个字符。
ob 其他函数说明
1.ob_end_flush 与 ob_end_clean
end 的顾名思义就结束,关闭缓冲区,都是关闭输出缓冲,一个是输出缓冲区,一个是清除。比如
<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo 'before';
ob_end_clean();
echo str_pad('',4096)."n";
for ($i=10; $i>0; $i--)
{
echo $i;
sleep(1);
}
上述代码是一下输出全部内容,而不是一个一个输出。ob_end_clean() 不是关闭了缓冲了?怎么不是一个一个输出呢,其实我们上面也说了,php 不是直接输出给浏览器,而是 web server。 虽然php 没有了 缓冲。但是web server 还是有的。所以下面代码:
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo 'before';
ob_end_clean();
echo str_pad('',4096)."n";
for ($i=10; $i>0; $i--)
{
flush();
echo $i;
sleep(1);
}
加上flush(),就会一行一行输出。 如果把ob_end_clean 换成 ob_end_flush 会把 before 输出来。
其他函数 可参考手册,比较简单。
总结
php 脚本到浏览器,要经过 php buffer=》web server buffer=》browser buffer。 最后显示到浏览器。 缺一不可。 所以我们要 ob_flush 和 flush 以及加上 echo str_pad('',4096) 才能调试出你想要的效果。
以上就是对PHP 缓冲的资料整理后续继续补充相关资料,谢谢大家对本站的支持!







