一个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中用hash实现的数组
Jul 17 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
php文件缓存类汇总
Nov 21 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
PDO::exec讲解
Jan 28 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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错误日志简单配置方法
2016/07/11 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
js模拟实现百度搜索
2020/06/28 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
Python二维码生成识别实例详解
2019/07/16 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
用python实现名片管理系统
2020/06/18 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
上海世博会口号
2014/06/19 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python