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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php获取指定日期之间的各个周和月的起止时间
Nov 24 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
php 可变函数使用小结
Jun 12 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
JS解析XML实例分析
2015/01/30 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
keras 多gpu并行运行案例
2020/06/10 Python
python中np是做什么的
2020/07/21 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
Java语言程序设计测试题改错题部分
2014/07/22 面试题
幼师自荐信范文
2013/10/06 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
个人合作协议范本
2015/08/06 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS