站长网_站长创业_站长主页_站长之家_易采站长站

会员投稿 投稿指南 站长资讯通告: laravel实现图片上传预览,及编辑时可更换图片,并
搜索:
您的位置: 主页 > 教程 > 网页编程 > PHP编程 > » 正文

PHP 输出缓冲控制(Output Control)详解(2)

来源: 易采站长站

 比如:

<?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 缓冲的资料整理后续继续补充相关资料,谢谢大家对本站的支持!

Tags:
最新图文资讯
1 2 3 4 5 6
相关文章列表:
最新文章
易采站长站 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助 -