资讯专栏INFORMATION COLUMN

ob缓存机制(ob:output_buffer)

stormgens / 376人阅读

摘要:我们要说一下中的缓存大概有哪些在中,我们可以粗略的将缓存分为客户端缓存缓存,服务器端缓存缓存。由于是基于架构的,所有,我们可以理解为浏览器端的缓存,服务器端缓存。

① 我们要说一下php中的缓存大概有哪些!

在php中,我们可以粗略的将缓存分为客户端缓存(Browser缓存),服务器端缓存(Server缓存)。由于php是基于b/s架构的,所有,我们可以理解为浏览器端的缓存,服务器端缓存。
在服务器端php自带的缓存中,主要可以分为两大类缓存!程序缓存和ob缓存!这也是我们学习服务器端缓存的主要内容!

②服务器端的响应流程

A、客户端向服务器端发送请求响应!
B、apache服务器加载了php模块,开启相应的进程(或线程)运行相应的php脚本页面!
C、在没有开启ob缓存的情况下,运行的结果全部都会被放到程序缓存中,然后打包发送给浏览器!浏览器对页面进行渲染,生成我们最后看到的web页面!
D、在开启了bo缓存的情况下,运行的结果会被分别放入到ob缓存和程序缓存中,当程序运行到最后一行的时候,就会将ob缓存中的数据刷回到程序缓存中,然后打包返回给浏览器!浏览器对页面进行渲染,生成我们看到的web页面!

③ob缓存的常见用法!

a、在脚本刚开的时候调用ob_start()函数,它的作用是开启ob缓存,究其实质是,在当前脚本中,是将php.ini配置文件的output_buffering选项开启!但是,除了开启ob缓存,其实obstart还有一个回调函数!在下面的例子,我们将所有的http://替换为了ftp://
举例如下:

 ";
        echo $url;
    }
    //将ob缓存中的内容刷到程序缓存中,并关闭ob缓存
    ob_end_flush();
?>

注意:在php5.3以后ob缓存默认是开启的!

b、将ob缓存中的数据,刷回到程序缓存中!
ob_flush(),将ob缓存中的内容,刷到程序缓存中!但并没有关闭ob缓存
ob_end_flush(),关闭ob缓存,并将数据刷回到程序缓存中!

c、清空ob缓存中的内容
ob_clean(),将ob缓存中的内容清空!
ob_end_clean(),将ob缓存中的数据清空,并且关闭ob缓存!

d、获的当前ob缓存中的内容!
ob_get_contents(),获取当前ob缓存中的内容
ob_get_clean(),获取当前ob缓存中的内容,并且清空当前的ob缓存

④ob缓存的作用!

ob缓存在各个方面都有应用,但是,本人知道的主要是在两个方面!
a、当网站准备做网站静态化的时候,选择ob缓存是一个不错的选择!

b、解决Warning: Cannot modify header information - headers already sent by的错误!
究其发生错误的原因:是因为响应头和相应主体位置错位导致的!正常情况下,服务器返回给浏览器的相应内容,应该是:响应头+响应主体!
但是,如果我们开启了ob缓存,那么相应头信息(一般也就是header()函数进行设置的信息),会被放入到程序缓存中!
而其他的输出内容,如:echo print_r var_dump 等,都会先被放入ob缓存中!
等程序结束的时候,或者ob缓存关闭的实话,将ob缓存的内容在放入程序缓存中!从而保证响应头信息,始终在响应主体内容之前!

⑤参考资料:

http://blog.sina.com.cn/s/blog_9bbafb790101cmpb.html
php经典实例
php手册

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20781.html

相关文章

  • output_buffering 学习笔记(一)

    摘要:输出缓存,在请求一个的过程中,实际上经过三个缓存程序缓存缓存浏览器缓存缓存的几个重要规则在服务中,如果我们开启了缓存,则数据首先放入到中如何开启有两个方法在配置这里去掉号即可在页面中使用通过打开的,则作用于所有的页面,使用打开则只作用于 output_buffering(ob,输出缓存), 在请求一个PHP的过程中,实际上经过三个缓存:1. 程序缓存2 ob缓存 3. 浏览器缓存. ...

    G9YH 评论0 收藏0
  • PHP基础之输出缓冲区基本概念、原理分析

    摘要:返回内部缓冲区的内容,关闭缓冲区。返回缓冲区的长度,如果缓冲区未被激活,则返回。得到所有输出缓冲区的状态。使用输出缓冲,可以将读取的文件读入缓冲区,达到一定大小时传送给用户,再继续读取,实现分片的效果。 一、概念 在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了、或者PHP运行完毕、或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数...

    harryhappy 评论0 收藏0
  • PHP中output buffering的原理及应用

    摘要:缓存过程在请求一个的过程中,实际上经过三个缓存程序缓存缓存浏览器缓存开启的两个方法在配置这里去掉号即可在页面中使用通过打开的,则作用于所有的页面。 php缓存过程 在请求一个PHP的过程中,实际上经过三个缓存: 程序缓存 ob缓存 浏览器缓存. 开启ob的两个方法 1.在php.ini 配置 ;output_buffering = 4096 这里去掉;号即可 2 在php页面中使用...

    XUI 评论0 收藏0
  • 浅析PHP的输出缓冲控制

    摘要:默认为是一个回调函数,将脚本的所有输出,用所定义的函数进行处理。在输出缓冲区的回调函数中使用这些函数,会导致未定义的错误。 简介 PHP有输出时,可以用输出控制函数来控制输出 缓冲阶段 ob_start(),将内部缓冲区(buffer)打开。当PHP遇到echo,printf等输出语句时, PHP就会将要输出的数据放入缓冲区(buffer)中,等待输出。而只有当缓冲区满了或者php运行...

    wangjuntytl 评论0 收藏0
  • PHP的输出缓冲区

    摘要:什么是缓冲区简单而言缓冲区的作用就是把输入或者输出的内容先放进内存而不显示或者读取至于为什么要有缓冲区这是一个很广泛的问题如果有兴趣可以在网山找下资料其实缓冲区最本质的作用就是协调高速和相对缓慢的设备磁盘等的运作在执行的时候在什么地方有用到 什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣...

    cyixlq 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<