一个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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
一个比较简单的PHP 分页分组类
Dec 10 PHP
php检测图片主要颜色的方法
Jul 01 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHP发送AT指令实例代码
May 26 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
php + WebUploader实现图片批量上传功能
May 06 PHP
php扩展开发入门demo示例
Sep 23 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
PHP实现简单的计算器
Aug 28 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
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
js计算精度问题小结
2013/04/22 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
在python中的socket模块使用代理实例
2014/05/29 Python
Python入门篇之文件
2014/10/20 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
vscode调试django项目的方法
2020/08/06 Python
用python对excel查重
2020/12/07 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
软件配置管理有什么好处
2015/04/15 面试题
军训教官感言
2014/03/02 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
新生儿未入户证明
2015/06/23 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python