程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 網站適用的PHP緩存類

網站適用的PHP緩存類

編輯:關於PHP編程

緩存在實際使用當中應用很廣泛,可以減輕對服務器數據庫的訪問,提高運行速度。目前很多CMS內容管理系統中頻繁使用緩存機制來提高系統運行的效率。下面是一個寫得不錯的緩存類,可以參考下緩存的機制與寫法。

cache.php 代碼如下:

[php] view plaincopy在CODE上查看代碼片派生到我的代碼片  
  1. <?    
  2. /*  
  3. 用戶需要事先定義的常量:  
  4. _CachePath_        模板緩存路徑  
  5. _CacheEnable_        自動緩存機制是否開啟,未定義或為空,表示關閉自動緩存機制  
  6. _ReCacheTime_        自動重新緩存間隔時間,單位為秒,未定義或為空,表示關閉自動重新緩存  
  7. */    
  8.     
  9. class cache   
  10. {  
  11.     var $cachefile;    
  12.     var $cachefilevar;    
  13.     
  14.     function cache()   
  15.     {    
  16.         //生成當前頁的Cache組文件名 $this->cachefilevar 及文件名 $this->cachefile    
  17.         //動態頁的參數不同對應的Cache文件也不同,但是每一個動態頁的所有Cache文件都有相同的文件名,只是擴展名不同    
  18.         $s=array(".","/");$r=array("_","");    
  19.         $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];    
  20.         $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);    
  21.     }    
  22.     
  23.     //刪除當前頁/模塊的緩存    
  24.     function delete()   
  25.     {    
  26.         //刪除當前頁的緩存    
  27.         $d = dir(_CachePath_);    
  28.         $strlen=strlen($this->cachefilevar);    
  29.         //返回當前頁的所有Cache文件組    
  30.         while (false !== ($entry = $d->read()))   
  31.         {    
  32.             if (substr($entry,0,$strlen)==$this->cachefilevar)   
  33.             {    
  34.                 if (!unlink(_CachePath_."/".$entry)) {echo "Cache目錄無法寫入";exit;}    
  35.             }    
  36.         }    
  37.     }    
  38.     
  39.     //判斷是否已Cache過,以及是否需要Cache    
  40.     function check()   
  41.     {    
  42.         //如果設置了緩存更新間隔時間 _ReCacheTime_    
  43.         if (_ReCacheTime_+0>0)  
  44.         {    
  45.             //返回當前頁Cache的最後更新時間    
  46.             $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];    
  47.             //如果更新時間超出更新間隔時間則刪除Cache文件    
  48.             if (time()-$var>_ReCacheTime_)   
  49.             {    
  50.                 $this->delete();$ischage=true;    
  51.             }    
  52.         }    
  53.         //返回當前頁的Cache    
  54.         $file=_CachePath_."/".$this->cachefile;    
  55.         //判斷當前頁Cache是否存在 且 Cache功能是否開啟    
  56.         return (file_exists($file) and _CacheEnable_ and !$ischange);    
  57.     }    
  58.     
  59.     //讀取Cache    
  60.     function read()   
  61.     {    
  62.         //返回當前頁的Cache    
  63.         $file=_CachePath_."/".$this->cachefile;    
  64.         //讀取Cache文件的內容    
  65.         if (_CacheEnable_) return readfile($file);    
  66.         else return false;    
  67.     }    
  68.     
  69.     //生成Cache    
  70.     function write($output)   
  71.     {    
  72.         //返回當前頁的Cache    
  73.         $file=_CachePath_."/".$this->cachefile;    
  74.         //如果Cache功能開啟    
  75.         if (_CacheEnable_)   
  76.         {    
  77.             //把輸出的內容寫入Cache文件    
  78.             $fp=@fopen($file,'w');    
  79.             if (!@fputs($fp,$output)) {echo "模板Cache寫入失敗";exit;}    
  80.             @fclose($fp);    
  81.             //如果設置了緩存更新間隔時間 _ReCacheTime_    
  82.             if (_ReCacheTime_+0>0)   
  83.             {    
  84.                 //更新當前頁Cache的最後更新時間    
  85.                 $file=_CachePath_."/".$this->cachefilevar;    
  86.                 $fp=@fopen($file,'w');    
  87.                 if (!@fwrite($fp,time())) {echo "Cache目錄無法寫入";exit;}    
  88.                 @fclose($fp);    
  89.             }    
  90.         }    
  91.     }    
  92. }    
  93. ?>  


 

 

類的使用:

[php] view plaincopy在CODE上查看代碼片派生到我的代碼片  
  1. <?php    
  2.     define("_CachePath_","./cache/");    
  3.     define("_CacheEnable_","1");    
  4.     define("_ReCacheTime_","43200");    
  5.     include('cache.php');    
  6.     $cache=new cache();    
  7.     if ($cache->check())   
  8.     {    
  9.         $template=$cache->read();    
  10.     }  
  11.     else   
  12.     {    
  13.         ob_start();    
  14.         ob_implicit_flush(0);    
  15. ?>    
  16.     頁面內容。。。。    
  17. <?php    
  18.         $template = ob_get_contents();    
  19.         $cache->write($template);    
  20.     }    
  21. ?>    


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved