php页面缓存ob系列函数介绍


Posted in PHP onOctober 18, 2012

这里有缓存技术的简单介绍:https://3water.com/article/4965.htm

php页面缓存主要用到的是ob系列函数,如ob_start(),ob_end_flush(),ob_get_contents()

下面是编码部分。

1.初始化函数,一般是设置页面缓存路径、缓存文件命名格式等,可按个人喜好自定义。这里用到的识别ID是经加密的$_SERVER[REQUEST_URI]参数。这个函数中最后还有一个if判断:若未过缓存期,则加载缓存文件,否则加载源文件。

function page_init() 
{ 
$url = $_SERVER['REQUEST_URI'];//子url,该参数一般是唯一的 
$pageid = md5($url); 
$dir = str_replace('/','_',substr($_SERVER['SCRIPT_NAME'],1,-4)); 
//目录命名方式,如exp_index 
if(!file_exists($pd = PAGE_PATH.$dir.'/'))@mkdir($pd,0777) or die("$pd目录创建失败"); 
//如cache/page/exp_index/ 
define('PAGE_FILE',$pd.$pageid.'.html'); 
//如cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html 
$contents = file_get_contents(PAGE_FILE);//读出 
if($contents && substr($contents, 13, 10) > time() )//对应page_cache()函数中加上的自定义头部 
{ 
echo substr($contents, 27); 
exit(0); 
} 
return true; 
}

2.页面缓存函数,这里使用到一个技巧:在缓存文件的内容中加上一个头部信息--过期时间,所以每次只需要对头部中的过期时间和当前时间进行比较(在page_init()函数中进行)就能判断缓存是否过期了。

function page_cache($ttl = 0) 
{ 
$ttl = $ttl ? $ttl : PAGE_TTL;//缓存时间,默认3600s 
$contents = ob_get_contents();//从缓存中获取内容 
$contents = "<!--page_ttl:".(time() + $ttl)."-->\n".$contents; 
//加上自定义头部:过期时间=生成时间+缓存时间 
file_put_contents(PAGE_FILE, $contents);//写入缓存文件中 
ob_end_flush();//释放缓存 
}

3.函数使用,注意这两个函数有先后执行顺序,还有别忘了ob_start()
<?php 
page_init();//页面缓存初始化 
ob_start();//开启缓存 ...//代码段 
page_cache(60);//一般是最后一行 
?>
PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(3)
Oct 09 PHP
小偷PHP+Html+缓存
Nov 25 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
php MessagePack介绍
Oct 06 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
注意!PHP 7中不要做的10件事
Sep 18 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
PHP unset函数原理及使用方法解析
Aug 14 PHP
php cc攻击代码与防范方法
Oct 18 #PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 #PHP
PHP中替换换行符的几种方法小结
Oct 15 #PHP
php变量范围介绍
Oct 15 #PHP
php模板函数 正则实现代码
Oct 15 #PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 #PHP
PHP获取文件后缀名的三个函数
Oct 15 #PHP
You might like
php访问查询mysql数据的三种方法
2006/10/09 PHP
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
安装python及pycharm的教程图解
2019/10/10 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
西部世纪.net笔试题面试题
2014/04/03 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
计算机网络专业个人的自我评价
2013/10/17 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
进步之星获奖感言
2014/02/22 职场文书
保护环境演讲稿
2014/05/10 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
骨干教师事迹材料
2014/12/17 职场文书
婚宴新娘致辞
2015/07/28 职场文书
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers