一个实用的PHP缓存类

 cache.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 );
        }
        
?>

缓存在实际使用当中应用很广泛,可以减轻对服务器数据库的访问,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值