一个实用的PHP缓存类

代码
<?  

 
/*  
 用户需要事先定义的常量:  

 _CachePath_ 模板缓存路径  

 _CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制  

 _ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存  

 
*/ 

   

 
class cache {  

    

 
var $cachefile;  

 
var $cachefilevar;  

    

 
function cache() {  

  
//生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile  

  //动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同  


  
$s=array(".","/");$r=array("_","");  

  
$this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];  

  
$this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);  

 }  

    

 
//删除当前页/模块的缓存  

 
function delete() {  

  
//删除当前页的缓存  

  
$d = dir(_CachePath_);  

  
$strlen=strlen($this->cachefilevar);  

  
//返回当前页的所有Cache文件组  

  
while (false !== ($entry = $d->read())) {  

  
if (substr($entry,0,$strlen)==$this->cachefilevar) {  

  
if (!unlink(_CachePath_."/".$entry)) {echo "Cache目录无法写入";exit;}  

  }  

  }  
 }  

    

 
//判断是否已Cache过,以及是否需要Cache  

 
function check() {  

  
//如果设置了缓存更新间隔时间 _ReCacheTime_  

 
if (_ReCacheTime_+0>0) {  

  
//返回当前页Cache的最后更新时间  

  
$var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];  

  
//如果更新时间超出更新间隔时间则删除Cache文件  

  
if (time()-$var>_ReCacheTime_) {  

  
$this->delete();$ischage=true;  

  }  

  }  

 
//返回当前页的Cache  

  
$file=_CachePath_."/".$this->cachefile;  

  
//判断当前页Cache是否存在 且 Cache功能是否开启  

  
return (file_exists($file) and _CacheEnable_ and !$ischange);  

 }  

    

 
//读取Cache  

 
function read() {  

  
//返回当前页的Cache  

  
$file=_CachePath_."/".$this->cachefile;  

  
//读取Cache文件的内容  

  
if (_CacheEnable_) return readfile($file);  

  
else return false;  

 }  

    

 
//生成Cache  

 
function write($output) {  

  
//返回当前页的Cache  

  
$file=_CachePath_."/".$this->cachefile;  

  
//如果Cache功能开启  

  
if (_CacheEnable_) {  

  
//把输出的内容写入Cache文件  

  
$fp=@fopen($file,'w');  

  
if (!@fputs($fp,$output)) {echo "模板Cache写入失败";exit;}  

  @
fclose($fp);  

  
//如果设置了缓存更新间隔时间 _ReCacheTime_  

  
if (_ReCacheTime_+0>0) {  

 
//更新当前页Cache的最后更新时间  

  
$file=_CachePath_."/".$this->cachefilevar;  

  
$fp=@fopen($file,'w');  

  
if (!@fwrite($fp,time())) {echo "Cache目录无法写入";exit;}  

  @
fclose($fp);  

  }  

  }  

 }  

    

 }   

 
?> 

 

调用方法

 

代码
<?php  

  
define("_CachePath_","./cache/");  

  
define("_CacheEnable_","1");  

  
define("_ReCacheTime_","43200");  

  
include('cache.php');  

  
$cache=new cache();  

  
if ($cache->check()) {  

  
$template=$cache->read();  

  }
else {  

  
ob_start();  

  
ob_implicit_flush(0);  

  
?>  

  页面内容。。。。  

 
<?php  

  
$template = ob_get_contents();  

  
$cache->write($template);  

  }  

  
?> 

 

 

posted @ 2010-05-24 11:28  韩天伟  阅读(2833)  评论(2编辑  收藏  举报