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实现小型站点广告管理
Oct 09 PHP
PHP用户指南-cookies部分
Oct 09 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
php生成图片验证码
Jun 09 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 PHP
PHP会话控制实例分析
Dec 24 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
php实现等比例压缩图片
Jul 26 PHP
php5与php7的区别点总结
Oct 11 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
给ECShop添加最新评论
2015/01/07 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
js实现验证码功能
2020/07/24 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python读写json文件的简单实现
2017/04/11 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
一套PHP的笔试题
2013/05/31 面试题
2015年学校教研室主任工作总结
2015/07/20 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技