php缓冲区学习小节

首先要分清楚php中的output_buffering、服务器的缓冲、浏览器的缓冲不是一样的概念。

顺序来说首先是echo,print>output_buffering>sercer buffering>bower buffering,输出数据的顺序是这么个回事,前提是打开了php.ini中output_buffering参数。

没有的打开就略过output_buffering。

服务器和浏览器缓冲不了解这里就只是说明下顺序。

对于output_buffering影响的php提供的常用的函数有

  • ob_start(),打开输出控制缓冲。
  • ob_flush(),送出输出缓冲区内容.可以理解为从output_buffering到了server buffering
  • ob_end_flush(),同ob_flush()操作同时关闭缓冲
  • ob_get_flush(),同ob_end_flush()操作同时返回送出的内容字符串。
  • ob_clean(),清空输出缓冲区内容
  • ob_end_clean(),同ob_clean()并关闭缓冲区
  • ob_get_clean(),返回缓冲区内容并关闭缓冲区
  • ob_get_contents(),返回缓冲区内容
  • ob_get_length(),返回缓冲区长度

对于server buffering 影响的输出控制函数有

  • flush(),可以理解为从server bufferiing 到bower buffering
<?php
ob_start();//或者php.ini 中output_buffering开启
/* ob_end_clean()或者ob_end_flush()*/
for($a = 1; $a<10; $a++){
    echo $a;
    flush();
   sleep(1); }

  这句代码网上也举了很多例子,结合理解看来可以认为是flush()操作的server buffering 到bower buffering,然而这个代码中output_buffering并没有满4096所以不会立马转到server buffering,也就不会呈现一秒一秒的显示数字到页面,如果想要实现提前关闭缓冲区就可以(关闭配置或者ob_end_clean(),ob_end_flush())就可实现将数据不经过output_buffering从而直接到server buffering

或者还可以

<?php
ob_start();//或者php.ini 中output_buffering开启

for($a = 1; $a<10; $a++){
    echo $a;
    ob_flush();//output_buffering 到 server buffering
    flush();//server buffering 到bower buffering
  sleep(1);
}

  这样也可以实现

  • ob_implicit_flush()绝对刷送,理解起来就是,参数为true时输出的数据从server buffering直接到bower buffering 也可以认为执行了一次flush()
  • 同样也有一个配置implicit_flush设置效果和ob_implicit_flush()一样 On或者Off
<?php
    ob_start();
    ob_implicit_flush(true);//或者打开implicit_flush
    for($a = 1; $a<10; $a++){
    echo $a;
    sleep(1);   
}

  这样也不会一秒一秒的显示,需要加入ob_flush() 或者关闭缓冲

总结下:flush()和ob_implicit_flush()操作对象是server buffering而其他以ob_flush()等等是操作对象是output_buffering,二者之间的关系一定是先output_buffering再server buffering的!!终于算是理解了

附上php输出缓冲控制

转载于:https://www.cnblogs.com/hujiejeff/p/6783086.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值