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垃圾代码优化操作代码
Aug 05 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
最常用的8款PHP调试工具
Jul 06 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 PHP
php检测url是否存在的方法
Apr 14 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
学习PHP的数组总结【经验】
May 05 PHP
php字符串操作常见问题小结
Oct 11 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
php实现微信扫码支付
Mar 26 PHP
php校验公钥是否可用的实例方法
Sep 17 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
How do I change MySQL timezone?
2008/03/26 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php注销代码(session注销)
2012/05/31 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python批量按比例缩小图片脚本分享
2015/05/21 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python虚拟环境完美部署教程
2019/08/06 Python
parser.add_argument中的action使用
2020/04/20 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
大专生工程监理求职信
2013/10/04 职场文书
毕业生造价工程师求职信
2013/10/17 职场文书
硕士研究生自我鉴定范文
2013/12/27 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
《迟到》教学反思
2016/02/24 职场文书
Oracle笔记
2021/04/05 Oracle
css弧边选项卡的项目实践
2023/05/07 HTML / CSS