一个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 相关文章推荐
php的控制语句
Oct 09 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
学习php分页代码实例
Oct 24 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
php 使用array函数实现分页
Feb 13 PHP
PHP常用的排序和查找算法
Aug 06 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 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
如何删除多级目录
2006/10/09 PHP
php中的一个中文字符串截取函数
2007/02/14 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
Python Web服务器Tornado使用小结
2014/05/06 Python
Python中的多重装饰器
2015/04/11 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
编辑个人求职信范文
2013/09/21 职场文书
群教班子对照检查材料
2014/08/26 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
写给领导的感谢信
2015/01/22 职场文书
英文邀请函
2015/02/02 职场文书
自主招生英文自荐信
2015/03/25 职场文书
安全教育培训制度
2015/08/06 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python