下一篇 »« 上一篇提示:鼠标放在图片上用鼠标中键即可控制图片大小

文章标题:多菜鸟的PHP缓存类

作者:    时间:2008-04-07    翻译网站:    点击:33543    本文共1篇文章
发表评论 | 查看评论 | 加入收藏 | Email给朋友 | 打印本文 | 字体:[ ]
标签:php缓存

PHP代码
  1. <?php   
  2. /*   
  3. * 缓存类 cache  
  4. * 作    者:多菜鸟  
  5. * 联系邮箱:kingerq AT msn DOT com  
  6. * 创建时间:2006-05-05  
  7. * 实    例:  
  8. include( "cache.php" );  
  9.    
  10. $cache = new cache(30);  
  11. $cache->cacheCheck();  
  12.    
  13. echo date("Y-m-d H:i:s");  
  14.    
  15. $cache->caching();  
  16. */  
  17. class cache {   
  18.   //缓存目录   
  19.   var $cacheRoot        = "./cache/";   
  20.   //缓存更新时间秒数,0为不缓存   
  21.   var $cacheLimitTime   = 0;   
  22.   //缓存文件名   
  23.   var $cacheFileName    = "";   
  24.   //缓存扩展名   
  25.   var $cacheFileExt     = "php";   
  26.     
  27.   /*  
  28.    * 构造函数  
  29.    * int $cacheLimitTime 缓存更新时间  
  30.    */  
  31.   function cache( $cacheLimitTime ) {   
  32.     ifintval$cacheLimitTime ) )    
  33.       $this->cacheLimitTime = $cacheLimitTime;   
  34.     $this->cacheFileName = $this->getCacheFileName();   
  35.     ob_start();   
  36.   }   
  37.      
  38.   /*  
  39.    * 检查缓存文件是否在设置更新时间之内  
  40.    * 返回:如果在更新时间之内则返回文件内容,反之则返回失败  
  41.    */  
  42.   function cacheCheck(){   
  43.     iffile_exists$this->cacheFileName ) ) {   
  44.       $cTime = $this->getFileCreateTime( $this->cacheFileName );   
  45.       if$cTime + $this->cacheLimitTime > time() ) {   
  46.         echo file_get_contents$this->cacheFileName );   
  47.         ob_end_flush();   
  48.         exit;   
  49.       }   
  50.     }   
  51.     return false;   
  52.   }   
  53.     
  54.   /*  
  55.    * 缓存文件或者输出静态  
  56.    * string $staticFileName 静态文件名(含相对路径)  
  57.    */  
  58.   function caching( $staticFileName = "" ){   
  59.     if$this->cacheFileName ) {   
  60.       $cacheContent = ob_get_contents();   
  61.       //echo $cacheContent;   
  62.       ob_end_flush();   
  63.     
  64.       if$staticFileName ) {   
  65.           $this->saveFile( $staticFileName$cacheContent );   
  66.       }   
  67.     
  68.       if$this->cacheLimitTime )   
  69.         $this->saveFile( $this->cacheFileName, $cacheContent );   
  70.     }   
  71.   }   
  72.      
  73.   /*  
  74.    * 清除缓存文件  
  75.    * string $fileName 指定文件名(含函数)或者all(全部)  
  76.    * 返回:清除成功返回true,反之返回false  
  77.    */  
  78.   function clearCache( $fileName = "all" ) {   
  79.     if$fileName != "all" ) {   
  80.       $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;   
  81.       iffile_exists$fileName ) ) {   
  82.         return @unlink( $fileName );   
  83.       }else return false;   
  84.     }   
  85.     if ( is_dir$this->cacheRoot ) ) {   
  86.       if ( $dir = @opendir( $this->cacheRoot ) ) {   
  87.         while ( $file = @readdir( $dir ) ) {   
  88.           $check = is_dir$file );   
  89.           if ( !$check )   
  90.           @unlink( $this->cacheRoot . $file );   
  91.         }   
  92.         @closedir$dir );   
  93.         return true;   
  94.       }else{   
  95.         return false;   
  96.       }   
  97.     }else{   
  98.       return false;   
  99.     }   
  100.   }   
  101.     
  102.   /*  
  103.    * 根据当前动态文件生成缓存文件名  
  104.    */  
  105.   function getCacheFileName() {   
  106.     return  $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;   
  107.   }   
  108.     
  109.   /*  
  110.    * 缓存文件建立时间  
  111.    * string $fileName   缓存文件名(含相对路径)  
  112.    * 返回:文件生成时间秒数,文件不存在返回0  
  113.    */  
  114.   function getFileCreateTime( $fileName ) {   
  115.     if( ! trim($fileName) ) return 0;   
  116.     
  117.     iffile_exists$fileName ) ) {    
  118.       return intval(filemtime$fileName ));   
  119.     }else return 0;   
  120.   }   
  121.      
  122.   /*  
  123.    * 保存文件  
  124.    * string $fileName  文件名(含相对路径)  
  125.    * string $text      文件内容  
  126.    * 返回:成功返回ture,失败返回false  
  127.    */  
  128.   function saveFile($fileName$text) {   
  129.     if( ! $fileName || ! $text ) return false;   
  130.     
  131.     if$this->makeDir( dirname( $fileName ) ) ) {   
  132.       if$fp = fopen$fileName"w" ) ) {   
  133.         if( @fwrite( $fp$text ) ) {   
  134.           fclose($fp);   
  135.           return true;   
  136.         }else {   
  137.           fclose($fp);   
  138.           return false;   
  139.         }   
  140.       }   
  141.     }   
  142.     return false;   
  143.   }   
  144.     
  145.   /*  
  146.    * 连续建目录  
  147.    * string $dir 目录字符串  
  148.    * int $mode   权限数字  
  149.    * 返回:顺利创建或者全部已建返回true,其它方式返回false  
  150.    */  
  151.   function makeDir( $dir$mode = "0777" ) {   
  152.     if( ! $dir ) return 0;   
  153.     $dir = str_replace"\\", "/", $dir );  
  154.       
  155.     $mdir = "";  
  156.     foreach( explode( "/", $dir ) as $val ) {  
  157.       $mdir .= $val."/";  
  158.       if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;   
  159.          
  160.       if( ! file_exists$mdir ) ) {   
  161.         if(!@mkdir$mdir$mode )){   
  162.          return false;   
  163.         }   
  164.       }   
  165.     }   
  166.     return true;   
  167.   }   
  168. }   
  169. ?>   
责任编辑:semirock
发表评论
密码: (游客不需要密码)
记住我【Alt+S 或 Ctrl+Enter 快速提交】