一个PHP缓存类代码(附详细说明)

yipeiwu_com6年前PHP代码库
复制代码 代码如下:

<?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中unlink()、mkdir()、rmdir()等方法的使用介绍

unlink()函数删除文件 、mkdir()函数创建目录、rmdir()函数删除目录 复制代码 代码如下: <html> <head> <title>...

详解PHP中foreach的用法和实例

详解PHP中foreach的用法和实例

在PHP中经常会用到foreach的使用,而要用到foreach,就必须用到数组。因此,在这篇文章中,我们一边讲数组,一边讲foreach。 foreach有两种语法: 第一种:遍历给...

php中array_multisort对多维数组排序的方法

本文实例讲述了php中array_multisort对多维数组排序的方法。分享给大家供大家参考。具体实现方法如下: function sort_array($array, $keyi...

用PHP即时捕捉PHP中的错误并发送email通知的实现代码

用PHP即时捕捉PHP中的错误并发送email通知的实现代码

开发PHP的朋友都知道,其实最担心的就是程序中出现一些异常或错误,这些状况如果输出到用户的萤幕会把用户给吓坏,甚至为此丢了工作,如果不输出到萤幕就得想办法记录到日志中,但是似乎不是每个人...

PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法

Author: Wenlong Wu 一、针对MS SQL SERVER数据库    有两种解决方案,如下:    修改php.ini来实现: 打开php.ini,可看到mssql.te...