PHP缓存类(可生成静态文件,FROM多菜鸟)

这个PHP缓存类写得比较好,推荐使用!
kingerq 修改版,加了一个清除的函数。
<?php
/*
* 缓存类 cache
* 作    者:多菜鸟
* 联系邮箱:kingerq AT msn DOT com
* 创建时间:2006-05-05
* 实    例:
include( "cache.php" );
 
$cache = new cache(30);
$cache->cacheCheck();
 
echo date("Y-m-d H:i:s");
 
$cache->caching();
*/

class cache {
 
//缓存目录
 
var $cacheRoot         = " ./cache/ " ;
 
//缓存更新时间秒数,0为不缓存
 
var $cacheLimitTime    = 0 ;
 
//缓存文件名
 
var $cacheFileName     = "" ;
 
//缓存扩展名
 
var $cacheFileExt      = " php " ;
 
 
/*
   * 构造函数
   * int $cacheLimitTime 缓存更新时间
   */

 
function cache ( $cacheLimitTime ) {
    
if ( intval ( $cacheLimitTime ) )
      
$this -> cacheLimitTime = $cacheLimitTime ;
    
$this -> cacheFileName = $this -> getCacheFileName () ;
    
ob_start () ;
 
}
 
 
/*
   * 检查缓存文件是否在设置更新时间之内
   * 返回:如果在更新时间之内则返回文件内容,反之则返回失败
   */

 
function cacheCheck (){
    
if ( file_exists ( $this -> cacheFileName ) ) {
      
$cTime = $this -> getFileCreateTime ( $this -> cacheFileName ) ;
      
if ( $cTime + $this -> cacheLimitTime > time () ) {
        
echo file_get_contents ( $this -> cacheFileName ) ;
        
ob_end_flush () ;
        
exit ;
      
}
    
}
    
return false ;
 
}
 
 
/*
   * 缓存文件或者输出静态
   * string $staticFileName 静态文件名(含相对路径)
   */

 
function caching ( $staticFileName = "" ){
    
if ( $this -> cacheFileName ) {
      
$cacheContent = ob_get_contents () ;
      
//echo $cacheContent;
      
ob_end_flush () ;
 
      
if ( $staticFileName ) {
          
$this -> saveFile ( $staticFileName , $cacheContent ) ;
      
}
 
      
if ( $this -> cacheLimitTime )
        
$this -> saveFile ( $this -> cacheFileName , $cacheContent ) ;
    
}
 
}
 
 
/*
   * 清除缓存文件
   * string $fileName 指定文件名(含函数)或者all(全部)
   * 返回:清除成功返回true,反之返回false
   */

 
function clearCache ( $fileName = " all " ) {
    
if ( $fileName != " all " ) {
      
$fileName = $this -> cacheRoot . strtoupper ( md5 ( $fileName )) . " . " . $this -> cacheFileExt ;
      
if ( file_exists ( $fileName ) ) {
        
return @ unlink ( $fileName ) ;
      
} else return false ;
    
}
    
if ( is_dir ( $this -> cacheRoot ) ) {
      
if ( $dir = @ opendir ( $this -> cacheRoot ) ) {
        
while ( $file = @ readdir ( $dir ) ) {
          
$check = is_dir ( $file ) ;
          
if ( ! $check )
          @
unlink ( $this -> cacheRoot . $file ) ;
        
}
        @
closedir ( $dir ) ;
        
return true ;
      
} else {
        
return false ;
      
}
    
} else {
      
return false ;
    
}
 
}
 
 
/*
   * 根据当前动态文件生成缓存文件名
   */

 
function getCacheFileName () {
    
return   $this -> cacheRoot . strtoupper ( md5 ( $_SERVER [ " REQUEST_URI " ])) . " . " . $this -> cacheFileExt ;
 
}
 
 
/*
   * 缓存文件建立时间
   * string $fileName   缓存文件名(含相对路径)
   * 返回:文件生成时间秒数,文件不存在返回0
   */

 
function getFileCreateTime ( $fileName ) {
    
if ( ! trim ( $fileName ) ) return 0 ;
 
    
if ( file_exists ( $fileName ) ) {
      
return intval ( filemtime ( $fileName )) ;
    
} else return 0 ;
 
}
 
 
/*
   * 保存文件
   * string $fileName  文件名(含相对路径)
   * string $text      文件内容
   * 返回:成功返回ture,失败返回false
   */

 
function saveFile ( $fileName , $text ) {
    
if ( ! $fileName || ! $text ) return false ;
 
    
if ( $this -> makeDir ( dirname ( $fileName ) ) ) {
      
if ( $fp = fopen ( $fileName , " w " ) ) {
        
if ( @ fwrite ( $fp , $text ) ) {
          
fclose ( $fp ) ;
          
return true ;
        
} else {
          
fclose ( $fp ) ;
          
return false ;
        
}
      
}
    
}
    
return false ;
 
}
 
 
/*
   * 连续建目录
   * string $dir 目录字符串
   * int $mode   权限数字
   * 返回:顺利创建或者全部已建返回true,其它方式返回false
   */

 
function makeDir ( $dir , $mode = " 0777 " ) {
    
if ( ! $dir ) return 0 ;
    
$dir = str_replace ( " // " , " / " , $dir ) ;
    
    
$mdir = "" ;
    
foreach ( explode ( " / " , $dir ) as $val ) {
      
$mdir .= $val . " / " ;
      
if ( $val == " .. " || $val == " . " || trim ( $val ) == "" ) continue ;
      
      
if ( ! file_exists ( $mdir ) ) {
        
if ( !@ mkdir ( $mdir , $mode )){
        
return false ;
        
}
      
}
    
}
    
return true ;
 
}
}
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值