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 相关文章推荐
基于initPHP的框架介绍
Apr 18 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
10个php函数实用却不常见
Oct 13 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
PHP7新功能总结
Apr 14 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 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 setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
详解Angular5 服务端渲染实战
2018/01/04 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
python中for语句简单遍历数据的方法
2015/05/07 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
Python正则表达式学习小例子
2020/03/03 Python
python用什么编辑器进行项目开发
2020/06/17 Python
python 实现两个npy档案合并
2020/07/01 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
餐厅总厨求职信
2014/03/04 职场文书
超级礼物观后感
2015/06/15 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
Python中的xlrd模块使用整理
2021/06/15 Python
go goroutine 怎样进行错误处理
2021/07/16 Golang
mysql如何能有效防止删库跑路
2021/10/05 MySQL