• (转载)php flush()刷新不能输出缓冲的原因分析


    (转载)http://www.webkaka.com/tutorial/php/2012/110628/

    在php程序编写中,flush()的使用率还是挺高的,它在网页表现即时信息效果时发挥了极为重要的作用,比如之前写的php实现限制文件下载速度的代码实例,flush()就起了举足轻重的作用,是进度条实现代码里的关键语句。

    关于flash()的解释

    语法:

    flush();

    作用:

    刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。

    问题:

    flush()刷新为什么不能输出缓冲?

    很简单的程序代码

    for ($i=10; $i>2; $i--)
    {
        echo $i.'<br />';
        flush();
        sleep(1);
    }

    其运行结果应该是从10到3,依次输出到浏览器里,效果图如下:

    上述代码,如果没有flush();这句,则10到3的数字会一起输出到浏览器。

    然而就是上述的代码,我在本地测试成功,但是上传到空间里后却无效了,这是怎么回事?

    后来我查了相关的资料,发现flush();的使用还需要注意一些问题,这些问题可能在我们没有遇到的时候我们是不会去想到的。那就是flush()需要与ob_flush()配合着使用,否则在linux系统里不会输出缓冲。

    而flush()与ob_flush()配合着使用的同时,写法上也需要讲究,那就是先写ob_flush();再写flush();,如下:

    ob_flush();
    flush();

    好了,问题的症状就在这里,于是,上述代码就应该写成如下所示:

    for ($i=10; $i>2; $i--)
    {
        echo $i.'<br />';
        ob_flush(); //此句不能少
        flush();
        sleep(1);
    }
    ob_end_flush();

    这样,无论是在哪个系统,哪个web服务器,都可以正常的输出缓冲了。

  • 相关阅读:
    loadrunne-- Analysis 分析器
    Fiddler抓包工具详细介绍
    在 Windows 10 x64 上安装及使用 ab 工具的流程
    Ab工具基本使用
    ab压测返回结果解析
    VMware Workstation 14 Pro永久激活密钥
    通用接口测试用例设计
    线段树の二 区间乘+区间加
    线段树の一 区间和
    C++位运算
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3149377.html
Copyright © 2020-2023  润新知