php缓存类 II

<?php 
/********************************************************** 
用法: 
include "./config/connect.php";     //变量都在里面设置了 
$cache=new Cache(); 
$cache->startToCacheFile()     //自动处理缓存是否开启以及缓存是否存在,进行相应的处理 
....... 
页面内容 
....... 
$cache->saveToCacheFile(); 
**********************************************************/ 
     
/********************************************************************* 
*用户需要事先定义的常量:已经在../config/config.php定义 
*_CachePath_             模板缓存路径 
*_CacheEnable_             自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 
*_ReCacheTime_             自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存 
*********************************************************************/ 
     
class Cache 

     
var 
$cachefile
var 
$cachefilevar
var 
$startTime
     
/********************************************************************* 
*生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile 
*动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同 
*********************************************************************/ 
function 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 startTimer() 
     { 
         $mtime = microtime (); 
         $mtime = explode (' ', $mtime); 
         $mtime = $mtime[1] + $mtime[0]; 
         $this->startTime = $mtime; 
     }     
     //结束时间 
function endTimer() 
     { 
         $mtime = microtime (); 
         $mtime = explode (' ', $mtime); 
         $mtime = $mtime[1] + $mtime[0]; 
         $endtime = $mtime; 
         $totaltime = round (($endtime - $this->startTime), 10); //单位秒 
         return $totaltime; 
     } 
//缓存所用的时间 
function spendTime() 
     { 
     return $this->endTimer()*1000;     //单位毫秒 
     } 
     */ 
     
//删除当前页/模块的缓存 
function cleanCacheFile()     

     
//删除当前页的缓存 
     
$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 checkCacheFile() 

     
//如果设置了缓存更新间隔时间 _ReCacheTime_ 
     
if (_ReCacheTime_+0>0)             
     { 
         
//返回当前页Cache的最后更新时间 
         
$var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0]; 
             
//如果更新时间超出更新间隔时间则删除Cache文件 
             
if (time()-$var>_ReCacheTime_)     
         { 
                 
$this->cleanCacheFile(); 
         
$ischage=true
             } 
         } 
         
//返回当前页的Cache 
         
$file=_CachePath_."/".$this->cachefile
     
//判断当前页Cache是否存在 且 Cache功能是否开启 
     
return (file_exists($file) and _CacheEnable_ and !$ischange); 

     
//读取Cache 
function echoCache() 

     
//返回当前页的Cache 
     
$file=_CachePath_."/".$this->cachefile
     
//读取Cache文件的内容 
     
if (_CacheEnable_)     
     return 
readfile($file); 
         else     
             return 
false
     } 
     
//开始缓存 
function startToCacheFile() 
     { 
     if (
$this->checkCacheFile()) 
     { 
         
//$this->startTimer(); //开始记录直接输出缓存内容所用的时间 
         
$this->echoCache(); 
     
//echo $this->spendTime();//结果记录直接输出缓存内容所用的时间 
     
exit; 
         } 
             else     
             {     
             
//$this->startTimer(); //开始记录第一次缓存内容所用的时间 
                 
ob_clean(); 
                 
ob_start(); 
                 
ob_implicit_flush(0); 
         } 
     } 
     
     
//生成Cache 
function saveToCacheFile() 
{     
     
//取得当前页面的内容 
     
$output ob_get_contents(); 
     
//返回当前页的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); 
             } 
     
//$this->spendTime();//结果记录第一次缓存内容所用的时间     
         

     } 
     
//end the cache Class 
?>

« 上一篇 | 下一篇 »
只显示10条记录相关文章
php header 跳转 (浏览: 451, 评论: 0)
定时清理旧的log文件 (浏览: 1806, 评论: 1)
FIREFOX取动态input值 (浏览: 1158, 评论: 0)
用css方式巧妙保护邮箱地址 (浏览: 1183, 评论: 0)
PHP5_OOP面向对象---教程下载 (浏览: 2299, 评论: 0)
vc++中用ado连接oracle数据库 (浏览: 4172, 评论: 0)
在DISDUZ!5.5中添加代码高亮插件成功 (浏览: 3123, 评论: 1)
xajax+php的一个DEMO--Blackjack(21点) (浏览: 3503, 评论: 3)
关于使用PHP6的感受 (浏览: 2735, 评论: 0)
[PHP AJAX] 简单比较 xajax、AJASON、flxAJAX、Aja... (浏览: 2711, 评论: 0)
Trackbacks
点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5
发表评论

评论内容(*):