1. 云栖社区>
  2. PHP教程>
  3. 正文

ob缓存机制(ob:output_buffer)

作者:用户 来源:互联网 时间:2017-12-01 11:36:10

缓存机制

ob缓存机制(ob:output_buffer) - 摘要: 本文讲的是ob缓存机制(ob:output_buffer), ① 我们要说一下php中的缓存大概有哪些。 在php中,我们可以粗略的将缓存分为客户端缓存(Browser缓存),服务器端缓存(Server缓存)。由于php是基于b/s架构的,所有,我们可以理解为浏览器端的缓存,服务器端缓存。在服务器端

① 我们要说一下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://
举例如下:

<?phpfunction filterWord($str){$str = str_replace('http://', 'ftp://', $str);return $str;}ob_start('filterWord');for($number=1; $number<=100;$number++) {$url = " http://www.google.com.hk <br/> ";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手册

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索缓存 机制 ,以便于您获取更多的相关知识。