设为首页 收藏本站
查看: 601|回复: 0

[经验分享] PHP实现’服务器推’(flush函数使用)

[复制链接]

尚未签到

发表于 2017-4-8 09:20:08 | 显示全部楼层 |阅读模式
  最近一直在做自己的图书站,分别使用过杰奇和读吧两套不同的系统,对于这两套系统也是又爱又恨,爱的是他们的功能强大,恨他们都同属没有开源精神的产物。呵呵,作为一名穷程序员,俺可以理解作者的苦衷,这里就不批判了。   
年假期间,无事可做,翻看自己以前的采集代码,发现很多可以优化和提升的地方,就简单做了下优化,其中也使用了用户体验更加优秀的服务器推技术,这里简单的介绍下核心的函数:flush。   
先看看手册中的解释:   
flush — 刷新输出缓冲;   
说明:   
void flush ( void )   
刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。
  flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
  个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。
  有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。
  甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到
  标记之前,不会显示出整个表格。
  一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
  根据上面的解释,我们简单的使用flush函数来实现一个例子:
  

  • <?php </li>
  • for ($i=10; $i>0; $i--)   
  • {   
  • echo $i;   
  • flush();   
  • sleep(1);   
  • }   
  • ?>
  上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来,后面的输出开始正常。PHP手册中对此也做出了解释,就是各种缓存在起作用,那我们该如何解决呢?!   
答案来了:^_^   
一、
  

  • <?php </li>
  • ob_end_clean();//修改部分   
  • for ($i=10; $i>0; $i--)   
  • {   
  • echo $i;   
  • flush();   
  • sleep(1);   
  • }   
  • ?>
  二、
  

  • <?php </li>
  • for ($i=10; $i>0; $i--)   
  • {   
  • echo $i;   
  • ob_flush();//修改部分   
  • flush();   
  • sleep(1);   
  • }   
  • ?>
  写到这里,发现一个哥们的文章,比我写的更加透彻,在次引用:   
剖析PHP中的输出缓冲   
最近想整理下自己的代码,搞个专门的站点放着,暂定名为:毛毛虫的实验室   
大家敬请期待,肯定都是好玩的东西,呵呵!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361761-1-1.html 上篇帖子: 用php比较两个文件夹的异同 下篇帖子: 突然想到php程序和谈恋爱很相似
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表