网站备案注销 万网,沈阳市三好街网站建设公司,网站 在线支付功能,制作网站开发公司php缓存的理解#xff0c;先列出ob系列函数的作用#xff1a;ob_start(func) 开启php缓存#xff0c;回调函数是对缓存内数据的处理函数ob_gzhandler 作为 ob_start 的回调函数#xff0c;对数据进行gz压缩ob_implicit_flush(true/false) 打开或关闭apache缓存#xff0c…php缓存的理解先列出ob系列函数的作用ob_start(func) 开启php缓存回调函数是对缓存内数据的处理函数ob_gzhandler 作为 ob_start 的回调函数对数据进行gz压缩ob_implicit_flush(true/false) 打开或关闭apache缓存打开apache缓存将直接将数据输出给用户浏览器不必用buffer函数手动输出flush 将apache缓存区的数据发送出去TCP到用户浏览器ob_get_contents 获取缓存内容ob_get_length 获取缓存内容长度ob_get_level 返回缓存级别(每个ob_start将开启一个重0编号的缓存区)array ob_get_status() 返回当前缓存机制的一些信息ob_list_handlersvoid ob_flush 送出当前缓存区内容到上一缓存区并保留当前缓存区void ob_end_flush 送出当前缓存区内容到上一缓存区销毁(关闭)当前缓存区string ob_get_flush 送出当前缓存区内容到上一缓存区销毁(关闭)当前缓存区 并返回缓冲区内容void ob_clean 清空当前缓冲区内容void ob_end_clean 清空当前缓冲区内容并销毁(关闭)当前缓存区string ob_get_clean 清空当前缓冲区内容并销毁(关闭)当前缓存区 并返回当前缓存区内容缓存的整个机制如下图所示ob系列函数针对的都是 php bufer这块在php buffer中每一个ob_start都会在php buffer中开启一块内存空间并且支持多级嵌套嵌套关系如图不嵌套的话 php最终输出缓存区就是level0 嵌套级别的操作都是对上级缓存空间进行的操作 (level0 的上级缓存是Apache Buffer)flush 函数是对Apache Buffer进行的操作刷新Apache Buffer 发送数据走TCP到用户浏览器PHP Buffer :在php.ini 中的选项 output_buffer 是控制php buffer的当output_buffer On 或者 output_buffer number(num0) 默认开启缓存 ob_start不能控制php buffer当 output_buffer0 或者 output_bufferOff 就是关闭缓存 在脚本中需要 通过 ob_start 函数开启output_buffer项不能通过 ini_set进行修改Apache Buffer在php.ini中的选项implicit_flush On/Off 开启的话Apache Buffer中的数据不会缓存而是直接发送出去ob_implicit_flush(true/ false) 可以对这个选项进行设置开启Apache Buffer缓存后要想送出缓存中的数据需要用到函数 flush很多时候 ob_flush flush 要结合使用ob_flush PHP Buffer-Apache Bufferflush Apache Buffer-Browserob_flush ob_end_flush ob_get_flush 都有送出缓存内容的操作这时的送出缓存都是送出到上一级别的缓存区域 最后一并输出给Apache Buffer关于PHP Buffer中的多级缓存每个ob_start 函数都会在PHP Buffer中开启一个缓存区域php会将这些区域进行编号(从0开始)可以通过 ob_get_level函数获取编号缓存嵌套的整个操作是将整个缓存进行合并最后一并发送给Apache Bufferob_flush函数是将当前编号内的内容送到上一编号并将php buffer中的内容发送到Apache Buffer例子1ob_start();echo buffer1;ob_start();echo buffer2;ob_start();echo buffer3;ob_end_flush();echo ob_get_level().;ob_end_flush();echo ob_get_level().;ob_end_flush();echo ob_get_level().;输出内容buffer1buffer2buffer3210从返回的level值可看出整个嵌套级别是从后往前的例子二ob_start();echo buffer1;ob_start();echo buffer2;ob_start();echo buffer3;ob_end_clean();ob_end_flush();ob_end_flush();结果buffer1buffer2不出所料先将 2 级别缓存的内容clean掉1 0 级别的内容正常输出例子三ob_start();echo buffer1;ob_start();echo buffer2;ob_start();echo buffer3;ob_end_flush();ob_end_clean();ob_end_flush();结果buffer1从上面的例子可以总结下php缓存机制中嵌套中 整合输出的过程如下ob_start(); echo buffer1 缓存如下 0:buffer1ob_start(); echo buffer2 缓存如下 1:buffer2----0:buffer1ob_start(); echo buffer3 缓存如下 2:buffer3----1:buffer2----0:buffer1如例子一中第一次 ob_end_flush 缓存结构 1:buffer2buffer3----0:buffer1第二次 ob_end_flush 缓存结构 0:buffer1buffer2buffer3第三次 ob_end_flush 缓存结构 发送内容到Apache Buffer结果buffer1buffer2buffer3如例子二中ob_end_clean 缓存结构 1:buffer2----0:buffer1ob_end_flush 缓存结构 0:buffer1buffer2ob_end_flush 缓存结构 发送内容到Apache Buffer结果buffer1buffer2如例子三中ob_end_flush 缓存结构 1:buffer2buffer3----0:buffer1ob_end_clean 缓存结构 0:buffer1ob_end_flush 缓存结构 发送内容到Apache Buffer结果buffer1以上清楚的解释了php中的缓存机制理解了整个机制函数的使用就简单了 Good Luck