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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
Aug 21 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
php函数连续调用实例分析
Jul 30 PHP
PHP加密技术的简单实现
Sep 04 PHP
WAF的正确bypass
Jan 05 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
php判断目录存在的简单方法
Sep 26 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实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
JS delegate与live浅析
2013/12/21 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
微信小程序tabBar设置实例解析
2019/11/14 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python3实现弹弹球小游戏
2019/11/25 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
幼儿园小班教师寄语
2014/04/03 职场文书
最美乡村教师观后感
2015/06/11 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript