PHP缓存技术OB系统函数(总结)
一、总结
一句话总结:
ob相比于php普通的文件操作多了缓存机制,所以适合做php的页面静态缓存
1、为什么php使用ob做静态文件缓存?
解决header()报错的问题:按照http协议的规定,回应内容不能在回应头之前输出,所以,如果在header()函数前面有内容输出,就会出现错误,但使用了ob_start()后就会将回应内容先放在ob缓存中,不会再消息头发送之前被发送,就解决了header()报错的问题!
php自带的ob【缓存机制】本身就适合做页面静态化
2、ob缓存常用的几个函数?
ob_start():开启缓存机制
ob_get_contents():获取ob缓存中的内容
ob_flush 清空缓存,输出内容,但不关闭缓存
ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_end_clean() 清除ob缓存中的内容,并关闭缓存ob_flush 清空缓存,输出内容,但不关闭缓存ob_end_flush 清空缓存,输出内容,并关闭缓存
3、ob缓存实例?
|||-begin
下面说一下用php自带的ob缓存机制实现页面静态化的方法,示例代码如下 如上述代码所示:将我们查询到的内容直接保存到html文件中,如果文件存在,之间输出,如果不存在,则访问数据库,执行对应的查询过程如果要设置文件的过期时间,可以在if语句里面加一个判断条件,用于判断缓存文件是否过期,time()-设置的过期时间
|||-end
基本的操作思路就是文件的操作思路:毕竟ob相比于文件操作多了缓存机制
二、PHP缓存技术OB系统函数--静态缓存与局部缓存
转自或参考:PHP缓存技术OB系统函数--静态缓存与局部缓存
https://blog.csdn.net/haoyunyun888/article/details/51181668主要函数:
ob_start()函数:打开输出缓冲区. 函数格式 void ob_start(void) 说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。 Flush:刷新缓冲区的内容,输出。 函数格式:flush() 说明:这个函数经常使用,效率很高。 ob_get_contents :返回内部缓冲区的内容。 函数格式:string ob_get_contents(void) 说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE. ob_get_length:返回内部缓冲区的长度。 函数格式:int ob_get_length(void) 说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE. ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区 函数格式:void ob_end_clean(void) 说明:这个函数不会输出内部缓冲区的内容而是把它删除 ob_end_flush: 发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区 函数格式:void ob_end_flush(void) 说明:这个函数发送输出缓冲区的内容(如果有的话) ob_implicit_flush:打开或关闭绝对刷新 函数格式:void ob_implicit_flush ([int flag])
说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
静态缓存的案例:
public function look(){ if(!is_file('k780.html')){ ob_start(); $this->load->view("k870"); $content=ob_get_contents(); $fb=fopen('k780.html',"w"); fwrite($fb,$content); fclose($fb); }else{ echo "I am is copy"; echo file_get_contents('k780.html'); } }
局部缓存(即在你所要想做的项目基础上进行添加,添加完成之后进行添加静态缓存.
public function pos(){ if(!empty($_COOKIE['name'])){ echo $_COOKIE['name']; echo '退出'; }else{ echo '登陆'; } }
三、利用php的ob缓存机制实现页面静态化
转自或参考:利用php的ob缓存机制实现页面静态化
https://www.cnblogs.com/ds-3579/p/5648801.html利用php的ob缓存机制实现页面静态化
首先介绍一下php中ob缓存常用到的几个常用函数
ob_start():开启缓存机制ob_get_contents():获取ob缓存中的内容ob_clean()清除ob缓存中的内容,但不关闭缓存ob_end_clean() 清除ob缓存中的内容,并关闭缓存ob_flush 清空缓存,输出内容,但不关闭缓存ob_end_flush 清空缓存,输出内容,并关闭缓存flush强制刷新输出缓存中的内容按照http协议的规定,回应内容不能在回应头之前输出,所以,如果在header()函数前面有内容输出,就会出现错误,但使用了ob_start()后就会将回应内容先放在ob缓存 中,不会再消息头发送之前被发送,就解决了header()报错的问题!下面说一下用php自带的ob缓存机制实现页面静态化的方法,示例代码如下
<?php $id=$_REQUEST['id']; //判断缓存文件是否存在,如果存在,直接输出 if(file_exists('content'.$id.'.html')){ echo file_get_contents('content'.$id.'.html'); return; } //开启缓存机制 ob_start(); //到数据库中查询所需要的内容 $conn=mysql_connect("localhost","root","root"); mysql_select('db'); mysql_query('set names utf8'); $sql="select content from table_name where id=$id"; $res=mysql_query($sql); $row=mysql_fetch_assoc($res); $content=$row[0]; mysql_free_result($res); mysql_close($conn); echo $content; //将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出 file_put_contents('content'.$id.'.html',ob_get_contents());?> 如上述代码所示:将我们查询到的内容直接保存到html文件中,如果文件存在,之间输出,如果不存在,则访问数据库,执行对应的查询过程如果要设置文件的过期时间,可以在if语句里面加一个判断条件,用于判断缓存文件是否过期,time()-设置的过期时间