php 缓冲区操作函数

ob_start() // 开启大小无限制的缓冲区

ob_clean() / ob_flush() // 清空/冲出 当前缓冲区

ob_get_contents() // 获取 当前缓冲区的内容

ob_end_clean() / ob_end_flush() // 清空/冲出 并关闭 当前缓冲区

tcp 缓冲区操作函数

flush() // 将数据强制输出至客户端

当我们完成一次请求并从服务器取的数据显示在浏览器页面时,数据其实经过了两层数据 buffer

1、php 自己的数据 buffer(默认 1024 * 4 Bytes),操作函数以 ob_* 开头的系列函数

2、web服务器的数据 buffer:apache 是调用系统内核的 tcp buffer 模块(默认 1024 * 4 Bytes)

nginx 为自己的 fastcgi_buffer_size(参数配置)

当我们调用 echo 等输出数据时,数据并不会被立即返回给浏览器,php 会将其缓存到自身的 buffer 中,而后冲出至 tcp buffer 中,最后才是输出至浏览器。

另外要强调的一点是,php 对每次请求都会自动的开启一个 buffer,这个 buffer 的大小为 php 的配置项:output_buffering(如果我们手动调用的 ob_start 函数,则我们手动开启的 buffer size 是没有限制的)。 当 php 缓存的数据大于这个参数时,php 会把数据输出到 tcp buffer 中,tcp buffer 也会根据当前缓存区数据大小决定是否输出到浏览器。

program data   >>    php buffer    >>   tcp buffer   >>   client

手动调用缓冲区操作函数输出数据

//使用缓冲区操作函数手动输出

for ($i = 10; $i > 0; $i --) {

echo date("Y-m-d H:i:s") . nl2br(PHP_EOL);

ob_flush(); //将 php buffer 数据强制输出到 tcp buffer

flush(); // 将 tcp buffer 数据强制输出到浏览器

sleep(1);

}

根据缓冲区机制模拟填充满时的条件触发缓冲区输出数据

//根据缓冲区机制填充缓冲区 迫使其自动输出数据

for ($i = 10; $i > 0; $i --) {

echo date("Y-m-d H:i:s") . nl2br(PHP_EOL);

echo str_repeat(" ", 1024 * 8); // 我用的是 win 测试,可能 tcp buffer 会大一些 这里给他 8 字节的空格

sleep(1);

}

实时的将数据即时输出至浏览器

flush()

flush() 函数是将 tcp buffer 数据强制输出到客户端,而非等缓冲区满后自动输出。tcp buffer 的默认值是 4KB,也就是说在数据未缓冲满时是不会发送给客户端的,直至脚本执行结束。如果脚本仍在执行中,缓冲区已满,则会将数据输出到浏览器。我们可以通过 flush() 函数将 tcp buffer 的数据强制输出到浏览器。

ob_flush()

将当前 php 缓冲区的内容输出到 tcp buffer (假设当前缓冲区为一级缓冲区),而不等待缓冲区填满。所以调用顺序应为 ob_flush 到 tcp buffer,再 flush 到浏览器。

ob_start()

开启大小无限制的缓冲区(php 默认开启的缓冲区是受 output_buffering 限制的),所以如果你不手动的 ob_flush/ob_end_flush 的话php是不会把数据输出给 tcp buffer 的,这点要注意。

flush函数php,PHP flush 和 ob_flush 的机制及详解相关推荐

  1. pandas新字段(数据列)生成、使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战

    pandas新字段(数据列)生成.使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战 pandas apply用法: pandas apply方法的作用原理 ...

  2. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

  3. linux getenv函数 get,linux之getenv putenv setenv和unsetenv详解

    1.getenv函数 头文件:#include 函数原型: char * getenv(const char* name); 函数说明:getenv()用来取得参数name环境变量的内容. 函数参数: ...

  4. python二维图颜色函数_通过python改变图片特定区域的颜色详解

    通过python改变图片特定区域的颜色详解 首先让我祭出一张数学王子高斯的照片,这位印在德国马克上的神人有多牛呢? 他是近代数学的奠基人之一,与牛顿, 阿基米德并称顶级三大数学家,随便找一个编程语言的 ...

  5. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  6. C语言getline函数CSDN,c++中的两种getline用法详解

    getline是C++标准库函数:但不是C标准库函数,而是POSIX(IEEE Std 1003.1-2008版本及以上)所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准 ...

  7. python strptime函数转时间数组_python time.strptime格式化实例详解

    在python的时间使用时,我们无非就是输出字符串的形式,又或者是其他的形式跟字符串之间的来回转换.时间数组对于我们获取具体的年或是天数,都是常用的首段.本篇需要讲到的time.strptime函数, ...

  8. java中flush 函数,Java DataOutputStream.flush()类型

    DataOutputStream(OutputStream out)构造函数 DataOutputStream的DataOutputStream.flush()具有以下语法. public void ...

  9. 面试题:函数回调机制、异步函数回调机制图例详解 没毛用

    函数回调机制,一种双向调用思想,简单来说就是,如下图所示: 在层次一中的方法一(函数)调用层次二中的方法,并传入函数二的地址,而这个被调用的方法又会调用层次一中的方法,这个最后被调用的方法二就是回调方 ...

最新文章

  1. 关于路径的使用,assi下载和
  2. 配置开发ExtJS环境
  3. java多线程之API初探(一)
  4. [Codeforces700E Cool Slogans]
  5. [蓝桥杯][2019年第十届真题c/c++B组]后缀表达式(解释sum -= 2*a[i])
  6. 在虚拟机中是无法运行CarlaUE.sh文件的
  7. 【Kafka】kafka AdminClient API
  8. 函数声明和函数表达式
  9. ACWING830 单调栈
  10. unity package 包下载不下来
  11. O2OA开源企业办公开发平台:使用Vue-CLI开发O2应用
  12. 互联网协议 — ECMP 等价多路径路由
  13. 回归模型中截距项的意义_计量经济学第12讲(时间序列计量经济学模型:协整与误差修正模型)...
  14. 【Scratch考级99图】图32-等级考试scratch绘制复杂图形8个八边形 少儿编程 scratch画图案例教程
  15. QQ音乐 vs 网易云音乐,用户体验哪家强?
  16. 手雷Android版 去广告,狂飙2MB/s 手雷(Android版迅雷)使用体验
  17. 信息学奥赛对大学计算机专业,区别大盘点:信息学竞赛、信息学奥赛、NOI和IOI傻傻分不清楚...
  18. 华为畅享二十Android是,华为畅享20 Pro智慧护眼怎么样?华为畅享20 Pro智慧护眼详解...
  19. python kivy显示图片_Kivy 图形界面开发初体验
  20. ip、子网掩码、网关、默认网关

热门文章

  1. Ubuntu下的常用命令之——cp
  2. java 找出姓“张”的学生,将他们的信息写入第二个文件
  3. 边学边记(七) lucene索引结构详解四(_N.fdx,_N.fdt)
  4. 迷宫生成算法---深度优先算法(基于python)
  5. Homekit智能家居DIY-智能触摸面板开关
  6. 如何保证数据库表中数据的唯一性
  7. Dell Inspiron 5488加内存32G
  8. 联想u450与部分操作系统不兼容的解决办法
  9. 联想t450进入bios设置按哪个键_联想电脑怎么在BIOS中设置从U盘或光盘启动
  10. 二叉搜索树(BST)删除节点--思路清晰