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与SQL注入攻击[三]
Apr 17 PHP
php图片缩放实现方法
Feb 20 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP实现搜索时记住状态的方法示例
May 11 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
写一个用户在线显示的程序
2006/10/09 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php错误级别的设置方法
2013/06/17 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python算法中的时间复杂度问题
2019/11/19 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
Delphi CS笔试题
2014/01/04 面试题
四年级评语大全
2014/04/21 职场文书
初中信息技术教学计划
2015/01/22 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers