一个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
第十节--抽象方法和抽象类
Nov 16 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
Yii框架实现多数据库配置和操作的方法
May 25 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
PHP执行系统命令函数实例讲解
Mar 03 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下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
利用php输出不同的心形图案
2016/04/22 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
Python下singleton模式的实现方法
2014/07/16 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
介绍Java的内部类
2012/10/27 面试题
Linux中如何用命令创建目录
2016/12/02 面试题
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
关于运动会的稿件
2014/02/02 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
2015年除四害工作总结
2015/07/23 职场文书
生日祝酒词大全
2015/08/10 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers