一个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 上传文件大小限制
Jul 05 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
php制作简单模版引擎
Apr 07 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
yii2 在控制器中验证请求参数的使用方法
Jun 19 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
Jan 26 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP常用的小程序代码段
2015/11/14 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
使用PDB简单调试Python程序简明指南
2015/04/25 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python 以16进制打印输出的方法
2018/07/09 Python
python 实现敏感词过滤的方法
2019/01/21 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
2014年文学毕业生自我鉴定
2014/04/23 职场文书
质量主管工作职责
2014/09/26 职场文书
庆祝国庆节标语
2014/10/09 职场文书
政风行风整改方案
2014/10/25 职场文书
导师工作推荐信
2015/03/27 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers