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 相关文章推荐
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
PHP系统命令函数使用分析
Jul 05 PHP
php防注入及开发安全详细解析
Aug 09 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
PHP实现获取文件mime类型多种方法解析
May 28 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
PHP新手上路(十四)
2006/10/09 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python3实现点餐系统
2019/01/24 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
numpy数组广播的机制
2019/07/12 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
HSRP的含义以及如何工作
2014/09/10 面试题
介绍一下UNIX启动过程
2013/11/14 面试题
体育教育专业自荐信范文
2013/12/20 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
安全员岗位职责范本
2015/04/11 职场文书
办公室管理规章制度
2015/08/04 职场文书
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server
css样式important规则的正确使用方式
2022/06/10 HTML / CSS