2PHP頁面快取

weixin_33766168發表於2016-05-12
Java程式碼  收藏程式碼
  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->clearCache('mv_moves.php'); 
  16. $cache->caching(); 
  17. */  
  18. class cache {  
  19.   //快取目錄  
  20.   var $cacheRoot        = "./cache/";  
  21.   //快取更新時間秒數,0為不快取  
  22.   var $cacheLimitTime   = 0;  
  23.   //快取檔名  
  24.   var $cacheFileName    = "";  
  25.   //快取副檔名  
  26.   var $cacheFileExt     = "php";  
  27.    
  28.   /* 
  29.    * 建構函式 
  30.    * int $cacheLimitTime 快取更新時間 
  31.    */  
  32.   function cache( $cacheLimitTime ) {  
  33.     if( intval( $cacheLimitTime ) )  
  34.       $this->cacheLimitTime = $cacheLimitTime;  
  35.     $this->cacheFileName = $this->getCacheFileName();  
  36.     ob_start();  
  37.   }  
  38.    
  39.   /* 
  40.    * 檢查快取檔案是否在設定更新時間之內 
  41.    * 返回:如果在更新時間之內則返回檔案內容,反之則返回失敗 
  42.    */  
  43.   function cacheCheck(){  
  44.     if( file_exists( $this->cacheFileName ) ) {  
  45.       $cTime = $this->getFileCreateTime( $this->cacheFileName );  
  46.       if( $cTime + $this->cacheLimitTime > time() ) {  
  47.         echo file_get_contents( $this->cacheFileName );  
  48.         ob_end_flush();  
  49.         exit;  
  50.       }  
  51.     }  
  52.     return false;  
  53.   }  
  54.    
  55.   /* 
  56.    * 快取檔案或者輸出靜態 
  57.    * string $staticFileName 靜態檔名(含相對路徑) 
  58.    */  
  59.   function caching( $staticFileName = "" ){  
  60.     if( $this->cacheFileName ) {  
  61.       $cacheContent = ob_get_contents();  
  62.       //echo $cacheContent;  
  63.       ob_end_flush();  
  64.    
  65.       if( $staticFileName ) {  
  66.           $this->saveFile( $staticFileName, $cacheContent );  
  67.       }  
  68.    
  69.       if( $this->cacheLimitTime )  
  70.         $this->saveFile( $this->cacheFileName, $cacheContent );  
  71.     }  
  72.   }  
  73.    
  74.   /* 
  75.    * 清除快取檔案 
  76.    * string $fileName 指定檔名(含函式)或者all(全部) 
  77.    * 返回:清除成功返回true,反之返回false 
  78.    */  
  79.   function clearCache( $fileName = "all" ) {  
  80.     if( $fileName != "all" ) {  
  81.       $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;  
  82.       if( file_exists( $fileName ) ) {  
  83.         return @unlink( $fileName );  
  84.       }else return false;  
  85.     }  
  86.     if ( is_dir( $this->cacheRoot ) ) {  
  87.       if ( $dir = @opendir( $this->cacheRoot ) ) {  
  88.         while ( $file = @readdir( $dir ) ) {  
  89.           $check = is_dir( $file );  
  90.           if ( !$check )  
  91.           @unlink( $this->cacheRoot . $file );  
  92.         }  
  93.         @closedir( $dir );  
  94.         return true;  
  95.       }else{  
  96.         return false;  
  97.       }  
  98.     }else{  
  99.       return false;  
  100.     }  
  101.   }  
  102.    
  103.   /* 
  104.    * 根據當前動態檔案生成快取檔名 
  105.    */  
  106.   function getCacheFileName() {  
  107.     return  $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;  
  108.   }  
  109.    
  110.   /* 
  111.    * 快取檔案建立時間 
  112.    * string $fileName   快取檔名(含相對路徑) 
  113.    * 返回:檔案生成時間秒數,檔案不存在返回0 
  114.    */  
  115.   function getFileCreateTime( $fileName ) {  
  116.     if( ! trim($fileName) ) return 0;  
  117.    
  118.     if( file_exists( $fileName ) ) {  
  119.       return intval(filemtime( $fileName ));  
  120.     }else return 0;  
  121.   }  
  122.    
  123.   /* 
  124.    * 儲存檔案 
  125.    * string $fileName  檔名(含相對路徑) 
  126.    * string $text      檔案內容 
  127.    * 返回:成功返回ture,失敗返回false 
  128.    */  
  129.   function saveFile($fileName, $text) {  
  130.     if( ! $fileName || ! $text ) return false;  
  131.    
  132.     if( $this->makeDir( dirname( $fileName ) ) ) {  
  133.       if( $fp = fopen( $fileName, "w" ) ) {  
  134.         if@fwrite( $fp, $text ) ) {  
  135.           fclose($fp);  
  136.           return true;  
  137.         }else {  
  138.           fclose($fp);  
  139.           return false;  
  140.         }  
  141.       }  
  142.     }  
  143.     return false;  
  144.   }  
  145.    
  146.   /* 
  147.    * 連續建目錄 
  148.    * string $dir 目錄字串 
  149.    * int $mode   許可權數字 
  150.    * 返回:順利建立或者全部已建返回true,其它方式返回false 
  151.    */  
  152.   function makeDir( $dir, $mode = "0777" ) {  
  153.     if( ! $dir ) return 0;  
  154.     $dir = str_replace( "\\", "/", $dir );  
  155.       
  156.     $mdir = "";  
  157.     foreach( explode( "/", $dir ) as $val ) {  
  158.       $mdir .= $val."/";  
  159.       if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;  
  160.         
  161.       if( ! file_exists( $mdir ) ) {  
  162.         if(!@mkdir( $mdir, $mode )){  
  163.          return false;  
  164.         }  
  165.       }  
  166.     }  
  167.     return true;  
  168.   }  
  169. }  
  170. ?>  

相關文章