一个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 相关文章推荐
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
php实现mysql数据库备份类
Mar 20 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
php实现图片添加水印功能
Feb 13 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
PHP微信支付实例解析
Jul 22 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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个可以简化php开发过程的MySQL工具
2010/04/11 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
window.name代替cookie的实现代码
2010/11/28 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
jQuery 选择器详解
2015/01/19 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python中编写ORM框架的入门指引
2015/04/29 Python
python通过文件头判断文件类型
2015/10/30 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
用python写测试数据文件过程解析
2019/09/25 Python
Python 私有化操作实例分析
2019/11/21 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
中英文求职信范文
2014/01/27 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
医院信息公开实施方案
2014/05/09 职场文书
预备党员公开承诺书
2014/05/28 职场文书
招商引资工作汇报
2014/10/28 职场文书
安全生产培训心得体会
2016/01/18 职场文书
高中化学教学反思
2016/02/22 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
logback 实现给变量指定默认值
2021/08/30 Java/Android
Python+tkinter实现高清图片保存
2022/03/13 Python
postgresql中如何执行sql文件
2023/05/08 PostgreSQL