php outout_buffering 缓存的问题

发布于 2022-09-05 08:13:57 字数 588 浏览 23 评论 0

描述:

php是5.2版本
php.ini中output_buffering = off并且implicit_flush = off
此时直接在脚本中使用如下代码:

<?php
for ($i=10; $i>0; $i--)
{
    echo $i."<br>";
    ob_flush();  
    flush();
    sleep(1);
}

打开页面可以看到数字一行一行的动态的被打印出来

问题:

网上查了一些资料,ob_start() 是在output_buffering设置为off时调用,
相当于手动开启缓存。

  1. 这个例子中并没有使用ob_start()并且output_buffering和implicit_flush都是off,打印出来的效果是动态的, 说明是有缓存效果的,缓存怎么开启了?
  2. 按照我的想法是上面示例没有开启缓存应该不用使用ob_fush和flush就应立刻显示到页面上了,但是去掉之后ob_flush和flush,没有立即显示。而是for循环之后,才打印出来。

上面两个问题,多谢回答!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

此刻的回忆 2022-09-12 08:13:57

flush 是当php作为webserver的一个module的时候才会起作用,换言之如果你用的nginx这个函数是不会起作用的;你的php的缓冲区已经关闭了,这一点是确认的,我用xdebug调试了一下你的代码,如图:

图片描述

可以看到,当ob_flush之后缓冲区已经是空的了,因此问题肯定不在php这里。这应该是webserver或者浏览器缓存的问题

在nginx.conf中有三个参数是有关缓冲区的,如下图,具体含义自己搜索,可以通过这三个参数控制nginx的缓冲
图片描述

如果你用的是apache,那么有可能是浏览器缓存,在你的浏览器里切换到相应的tab,按ctrl+shift+j会出现如下页面,将浏览器缓存关闭然后再试一下
图片描述

淡笑忘祈一世凡恋 2022-09-12 08:13:57

这篇文章很经典,可以帮助到你:深入理解php的输出缓冲区

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文