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 深入理解strtotime函数的使用详解
May 23 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
php截取视频指定帧为图片
May 16 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
Laravel相关的一些故障解决
Aug 19 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替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
php绘制一条直线的方法
2015/01/24 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
简单理解Vue中的nextTick方法
2018/01/30 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
Python反射用法实例简析
2017/12/22 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
个人简历自我鉴定
2013/10/11 职场文书
年度考核自我评价
2014/01/25 职场文书
策划总监岗位职责
2014/02/16 职场文书
中队活动总结
2014/08/27 职场文书
2014年教师工作总结
2014/11/10 职场文书
正规借条模板
2015/05/26 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS