一个PHP缓存类代码(附详细说明)


Posted in PHP onJune 09, 2011
<?php 
define('CACHE_ROOT', dirname(__FILE__).'/cache'); //缓存存放目录 
define('CACHE_TIME', 1800);//缓存时间 单位秒 
define('CACHE_FIX','.html'); 
$CacheName=md5($_SERVER['REQUEST_URI']).CACHE_FIX; //缓存文件名 
$CacheDir=CACHE_ROOT.'/'.substr($CacheName,0,1);//缓存文件存放目录 
$CacheUrl=$CacheDir.'/'.$CacheName;//缓存文件的完整路径 
//GET方式请求才缓存,POST之后一般都希望看到最新的结果 
if($_SERVER['REQUEST_METHOD']=='GET'){ 
//如果缓存文件存在,并且没有过期,就把它读出来。 
if(file_exists($CacheName) && time()-filemtime($CacheName)<CACHE_TIME){ 
$fp=fopen($CacheName,'rb'); 
fpassthru($fp); 
fclose($fp); 
exit; 
} 
//判断文件夹是否存在,不存在则创建 
elseif(!file_exists($CacheDir)){ 
if(!file_exists(CACHE_ROOT)){ 
mkdir(CACHE_ROOT,0777); 
chmod(CACHE_ROOT,0777); 
} 
mkdir($CacheDir,0777); 
chmod($CacheDir,0777); 
} 
//回调函数,当程序结束时自动调用此函数 
function AutoCache($contents){ 
global $CacheUrl; 
$fp=fopen($CacheUrl,'wb'); 
fwrite($fp,$contents); 
fclose($fp); 
chmod($CacheUrl,0777); 
//生成新缓存的同时,自动删除所有的老缓存,以节约空间,可忽略。 
//DelOldCache(); 
return $contents; 
} 
function DelOldCache(){ 
chdir(CACHE_ROOT); 
foreach (glob("*/*".CACHE_FIX) as $file){ 
if(time()-filemtime($file)>CACHE_TIME)unlink($file); 
} 
} 
//回调函数 auto_cache 
ob_start('AutoCache'); 
}else{ 
//不是GET的请求就删除缓存文件。 
if(file_exists($CacheUrl))unlink($CacheUrl); 
} 
?>
PHP 相关文章推荐
模仿OSO的论坛(四)
Oct 09 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
php 运行效率总结(提示程序速度)
Nov 26 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
php mail to 配置详解
Jan 16 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
php日志函数error_log用法实例分析
Sep 23 PHP
Yii框架模拟组件调用注入示例
Nov 11 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 #PHP
php 面试碰到过的问题 在此做下记录
Jun 09 #PHP
rephactor 优秀的PHP的重构工具
Jun 09 #PHP
php获取post中的json数据的实现方法
Jun 08 #PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 #PHP
apache+php完美解决301重定向的两种方法
Jun 08 #PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 #PHP
You might like
PHP中实现进程间通讯
2006/10/09 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
vue中如何使用ztree
2018/02/06 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
Python反射的用法实例分析
2018/02/11 Python
关于Python的一些学习总结
2018/05/25 Python
python 文件转成16进制数组的实例
2018/07/09 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
咖啡厅创业计划书范本
2014/01/22 职场文书
物业保安员岗位职责
2014/03/14 职场文书
大学生毕业评语
2014/12/31 职场文书
嘉宾邀请函
2015/01/31 职场文书
毕业生对母校寄语
2015/02/26 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
python编程项目中线上问题排查与解决
2021/11/01 Python
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电