緩衝在實際使用當中應用很廣泛,可以減輕對伺服器資料庫的訪問,提高運行速度。目前很多CMS內容管理系統中頻繁使用緩衝機制來提高系統啟動並執行效率。下面是一個寫得不錯的緩衝類,可以參考下緩衝的機制與寫法。
cache.php 代碼如下:
[php] view plaincopy
- /*
- 使用者需要事先定義的常量:
- _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] view plaincopy
- 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);
- ?>
- 頁面內容。。。。
- $template = ob_get_contents();
- $cache->write($template);
- }
- ?>
http://www.bkjia.com/PHPjc/750358.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/750358.htmlTechArticle緩衝在實際使用當中應用很廣泛,可以減輕對伺服器資料庫的訪問,提高運行速度。目前很多CMS內容管理系統中頻繁使用緩衝機制來提高系...