-
-
class Cache {
- /**
- * $dir : 快取檔案存放目錄
- * $lifetime : 快取檔案有效期限,單位為秒
- * $cacheid : 快取檔案路徑,包含檔案名稱
- * $ext : 快取檔案副檔名(可以不用),這裡使用是為了查看文件方便
- */
- private $dir;
- 私人$終身;
- 內部$cacheid;
- 私人$ext;
- /**
- * 析構函數,檢查快取目錄是否有效,預設賦值
- */
- function __construct($dir='',$lifetime=1800) {
- if ($this->dir_isvalid($dir)) {
- $這->目錄=$目錄;
- $this->lifetime = $lifetime;
- $this->ext = '.Php';
- $this->cacheid = $this->getcacheid();
- }
- }
- /**
- * 檢查快取是否有效
- * edit bbs.it-home.org
- */
- private function isvalid() {
- if (!file_exists($this->cacheid)) return false;
- if (!(@$mtime = filemtime($this->cacheid))) return false;
- if (mktime() - $mtime > $this->lifetime) return false;
- 回傳true;
- }
- /**
- * 寫入快取
- * $mode == 0 , 以瀏覽器快取的方式取得頁面內容
- * $mode == 1 , 以直接賦值(透過$content參數接收)的方式取得頁面內容
- * $mode == 2 , 以本地讀取(fopen ile_get_contents)的方式取得頁面內容(似乎這種方式沒什麼必要)
- */
- public function write($mode=0,$content='') {
- switch ($mode) {
- 情況0:
- $content = ob_get_contents();
- 休息;
- 預設:
- 規則;
- }
- ob_end_flush();
- 嘗試 {
- file_put_contents($this->cacheid,$content);
- }
- catch (Exception $e) {
- $this->error('寫入儲存失敗!請檢查目錄權限!');
- }
- }
- /**
- * 載入快取
- * exit() 載入快取後終止原始頁面程式的執行,快取無效則執行原頁面程式產生快取
- * ob_start() 開啟瀏覽器快取用於在頁面結尾處取得頁面內容
- */
- public function load() {
- if ($this->isvalid()) {
- echo "這是伺服器。
- //以下兩種方式,哪一種方式好?
- //echo file_get_contents($this->cacheid);
- 退出();
- }
- else {
- ob_start();
- }
- }
- /**
- * 清除快取
- */
- public function clean() {
- try {
- unlink($this->cacheid);
- }
- catch (Exception $e) {
- $this->error('清除硬碟檔案失敗!請檢查目錄權限!');
- }
- }
- /**
- * 取得快取檔案路徑
- */
- private function getcacheid() {
- return $this->dir.md5($this->geturl()) .$這->分機;
- }
- /**
- * 檢查目錄是否存在或是否可建立
- */
- private function dir_isvalid($dir) {
- if (is_dir($dir)) return true;
- 嘗試 {
- mkdir($dir,0777);
- }
- catch (Exception $e) {
- $this->error('所設定的伺服器目錄不存在並且建立失敗!請檢查目錄權限!');
- 回傳 false;
- }
- 回傳 true;
- }
- /**
- * 取得目前頁面完整url
- */
- private function geturl() {
- $url = '';
- if (isset($_SERVER['REQUEST_URI'])) {
- $url = $_SERVER['REQUEST_URI'];
- }
- else {
- $url = $_SERVER['Php_SELF'];
- $url .= 空($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
- }
- 回傳 $url;
- }
- /**
- * 輸出錯誤訊息
- */
- 導管函數錯誤($str) {
- echo '
'.$str.' ';
- }
- }
- ?>
-
複製程式碼
2,php快取類別的示範程式碼
-
-
/*
- * 可自由轉載使用,請保留版權資訊,謝謝使用!
- * Class Name : Cache (For Php5)
- * Version : 1.0
- * Description : 動態快取類別,用於控制頁面自動產生快取、呼叫快取、更新快取、刪除快取.
- * Remark :
- 1.此版本為Php5版本
- 2.此版本為utf-8編碼,如果網站採用其它編碼請自行轉換,Windows系統用記事本打開另存為,選擇相應編碼即可(一般ANSI ),Linux下請使用對應編輯軟體或iconv命令行.
- 3.拷貝貼上的就不用管上面第2條了.
- * 關於快取的一點感想:
- * 動態快取和靜態緩存的根本差異在於其是自動的,用戶訪問頁面過程就是生成緩存、瀏覽緩存、更新緩存的過程,無需人工操作幹預.
- * 靜態緩存指的就是生成靜態頁面,相關操作一般是在網站後台完成,需人工操作(也就是手動生成).
- */
-
- /*
- * 使用方法舉例
- ----------Demo1---- ----
- require_once('cache.inc.php');
- $cachedir = './Cache/'; //設定快取目錄
- $cache = new Cache($cachedir,10 ); //省略參數即採用預設設定, $cache = new Cache($cachedir);
- if ($_GET['cacheact'] != 'rewrite') //此處為一技巧,透過xx .Php?cacheact=rewrite更新快取
- $cache->load(); //裝載快取,快取有效則不執行以下頁面程式碼
- //頁面程式碼開始
- echo date('H:i :s jS F');
- //頁碼結束
- $cache->write(); //首次運作或快取過期,產生快取
---- -----Demo2-------
- require_once('cache.inc.php');
- $cachedir = './Cache/'; //設定快取目錄
- $ cache = new Cache($cachedir,10); //省略參數即採用預設設定, $cache = new Cache($cachedir);
- if ($_GET['cacheact'] != 'rewrite') / /此處為一技巧,透過xx.Php?cacheact=rewrite更新快取
- $cache->load(); //裝載快取,快取有效則不執行以下頁面程式碼
- //頁面程式碼開始
- $content = date('H:i:s jS F');
- echo $content;
- //頁面程式碼結束
- $cache->write(1,$content); //首次運行或快取過期,產生快取
------------Demo3----
- require_once('cache.inc.php');
- define('CACHEENABLE',true);
-
- if (CACHEENABLE) {
- $cachedir = './Cache/'; //設定快取目錄
- $cache = new Cache( $cachedir,10); //省略參數即採用預設設定, $cache = new Cache($cachedir);
- if ($_GET['cacheact'] != 'rewrite') //此處為一技巧,透過xx.Php?cacheact=rewrite更新快取
- $cache->load(); //裝載快取,快取有效則不執行以下頁面程式碼
- }
- //頁面程式碼開始
- $content = date('H:i:s jS F');
- echo $content;
- //頁面程式碼結束
- if (CACHEENABLE)
- $cache->write(1, $content); //首次運作或快取過期,產生快取
- */
- ?>
-
複製程式碼
|
複製程式碼