一个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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
解析php中获取系统信息的方法
Jun 25 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
PHP中SESSION过期设置
Mar 09 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php广告加载类用法实例
2014/09/23 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
php验证码生成代码
2015/11/11 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
phpStorm2020 注册码
2020/09/17 PHP
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
SQL Server面试题
2013/04/04 面试题
简历中求职的个人自我评价
2013/12/03 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
工作时间上网检讨书
2014/02/03 职场文书
公证委托书大全
2014/04/04 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
给病人的慰问信
2015/03/23 职场文书
红歌会主持词
2015/07/02 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python