一个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和ACCESS写聊天室(十)
Oct 09 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
使用php清除bom示例
Mar 03 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
CodeIgniter辅助之第三方类库third_party用法分析
Jan 20 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
PHP常用函数之格式化时间操作示例
Oct 21 PHP
PHP解决高并发的优化方案实例
Dec 10 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实现MVC开发得最简单的方法――模型
2007/04/10 PHP
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
什么是python的自省
2020/06/21 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
秋季运动会广播稿
2014/02/22 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
质检员岗位职责范本
2015/04/07 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
网络研修心得体会
2016/01/08 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android