首頁 > 後端開發 > php教程 > 一個php緩存類別與呼叫範例

一個php緩存類別與呼叫範例

WBOY
發布: 2016-07-25 08:59:20
原創
1180 人瀏覽過
複製程式碼
  1. class Cache {
  2. /**
  3. * $dir : 快取檔案存放目錄
  4. * $lifetime : 快取檔案有效期限,單位為秒
  5. * $cacheid : 快取檔案路徑,包含檔案名稱
  6. * $ext : 快取檔案副檔名(可以不用),這裡使用是為了查看文件方便
  7. */
  8. private $dir;
  9. 私人$終身;
  10. 內部$cacheid;
  11. 私人$ext;
  12. /**
  13. * 析構函數,檢查快取目錄是否有效,預設賦值
  14. */
  15. function __construct($dir='',$lifetime=1800) {
  16. if ($this->dir_isvalid($dir)) {
  17. $這->目錄=$目錄;
  18. $this->lifetime = $lifetime;
  19. $this->ext = '.Php';
  20. $this->cacheid = $this->getcacheid();
  21. }
  22. }
  23. /**
  24. * 檢查快取是否有效
  25. * edit bbs.it-home.org
  26. */
  27. private function isvalid() {
  28. if (!file_exists($this->cacheid)) return false;
  29. if (!(@$mtime = filemtime($this->cacheid))) return false;
  30. if (mktime() - $mtime > $this->lifetime) return false;
  31. 回傳true;
  32. }
  33. /**
  34. * 寫入快取
  35. * $mode == 0 , 以瀏覽器快取的方式取得頁面內容
  36. * $mode == 1 , 以直接賦值(透過$content參數接收)的方式取得頁面內容
  37. * $mode == 2 , 以本地讀取(fopen ile_get_contents)的方式取得頁面內容(似乎這種方式沒什麼必要)
  38. */
  39. public function write($mode=0,$content='') {
  40. switch ($mode) {
  41. 情況0:
  42. $content = ob_get_contents();
  43. 休息;
  44. 預設:
  45. 規則;
  46. }
  47. ob_end_flush();
  48. 嘗試 {
  49. file_put_contents($this->cacheid,$content);
  50. }
  51. catch (Exception $e) {
  52. $this->error('寫入儲存失敗!請檢查目錄權限!');
  53. }
  54. }
  55. /**
  56. * 載入快取
  57. * exit() 載入快取後終止原始頁面程式的執行,快取無效則執行原頁面程式產生快取
  58. * ob_start() 開啟瀏覽器快取用於在頁面結尾處取得頁面內容
  59. */
  60. public function load() {
  61. if ($this->isvalid()) {
  62. echo "這是伺服器。
  63. //以下兩種方式,哪一種方式好?
  64. //echo file_get_contents($this->cacheid);
  65. 退出();
  66. }
  67. else {
  68. ob_start();
  69. }
  70. }
  71. /**
  72. * 清除快取
  73. */
  74. public function clean() {
  75. try {
  76. unlink($this->cacheid);
  77. }
  78. catch (Exception $e) {
  79. $this->error('清除硬碟檔案失敗!請檢查目錄權限!');
  80. }
  81. }
  82. /**
  83. * 取得快取檔案路徑
  84. */
  85. private function getcacheid() {
  86. return $this->dir.md5($this->geturl()) .$這->分機;
  87. }
  88. /**
  89. * 檢查目錄是否存在或是否可建立
  90. */
  91. private function dir_isvalid($dir) {
  92. if (is_dir($dir)) return true;
  93. 嘗試 {
  94. mkdir($dir,0777);
  95. }
  96. catch (Exception $e) {
  97. $this->error('所設定的伺服器目錄不存在並且建立失敗!請檢查目錄權限!');
  98. 回傳 false;
  99. }
  100. 回傳 true;
  101. }
  102. /**
  103. * 取得目前頁面完整url
  104. */
  105. private function geturl() {
  106. $url = '';
  107. if (isset($_SERVER['REQUEST_URI'])) {
  108. $url = $_SERVER['REQUEST_URI'];
  109. }
  110. else {
  111. $url = $_SERVER['Php_SELF'];
  112. $url .= 空($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
  113. }
  114. 回傳 $url;
  115. }
  116. /**
  117. * 輸出錯誤訊息
  118. */
  119. 導管函數錯誤($str) {
  120. echo '
    '.$str.'
    ';
  121. }
  122. }
  123. ?>
複製程式碼

2,php快取類別的示範程式碼

  1. /*

  2. * 可自由轉載使用,請保留版權資訊,謝謝使用!
  3. * Class Name : Cache (For Php5)
  4. * Version : 1.0
  5. * Description : 動態快取類別,用於控制頁面自動產生快取、呼叫快取、更新快取、刪除快取.
  6. * Remark :
  7. 1.此版本為Php5版本
  8. 2.此版本為utf-8編碼,如果網站採用其它編碼請自行轉換,Windows系統用記事本打開另存為,選擇相應編碼即可(一般ANSI ),Linux下請使用對應編輯軟體或iconv命令行.
  9. 3.拷貝貼上的就不用管上面第2條了.
  10. * 關於快取的一點感想:
  11. * 動態快取和靜態緩存的根本差異在於其是自動的,用戶訪問頁面過程就是生成緩存、瀏覽緩存、更新緩存的過程,無需人工操作幹預.
  12. * 靜態緩存指的就是生成靜態頁面,相關操作一般是在網站後台完成,需人工操作(也就是手動生成).
  13. */
  14. /*
  15. * 使用方法舉例
  16. ----------Demo1---- ----
  17. require_once('cache.inc.php');
  18. $cachedir = './Cache/'; //設定快取目錄
  19. $cache = new Cache($cachedir,10 ); //省略參數即採用預設設定, $cache = new Cache($cachedir);
  20. if ($_GET['cacheact'] != 'rewrite') //此處為一技巧,透過xx .Php?cacheact=rewrite更新快取
  21. $cache->load(); //裝載快取,快取有效則不執行以下頁面程式碼
  22. //頁面程式碼開始
  23. echo date('H:i :s jS F');
  24. //頁碼結束
  25. $cache->write(); //首次運作或快取過期,產生快取
  26. ---- -----Demo2-------

  27. require_once('cache.inc.php');
  28. $cachedir = './Cache/'; //設定快取目錄
  29. $ cache = new Cache($cachedir,10); //省略參數即採用預設設定, $cache = new Cache($cachedir);
  30. if ($_GET['cacheact'] != 'rewrite') / /此處為一技巧,透過xx.Php?cacheact=rewrite更新快取
  31. $cache->load(); //裝載快取,快取有效則不執行以下頁面程式碼
  32. //頁面程式碼開始
  33. $content = date('H:i:s jS F');
  34. echo $content;
  35. //頁面程式碼結束
  36. $cache->write(1,$content); //首次運行或快取過期,產生快取
  37. ------------Demo3----

  38. require_once('cache.inc.php');
  39. define('CACHEENABLE',true);
  40. if (CACHEENABLE) {
  41. $cachedir = './Cache/'; //設定快取目錄
  42. $cache = new Cache( $cachedir,10); //省略參數即採用預設設定, $cache = new Cache($cachedir);
  43. if ($_GET['cacheact'] != 'rewrite') //此處為一技巧,透過xx.Php?cacheact=rewrite更新快取
  44. $cache->load(); //裝載快取,快取有效則不執行以下頁面程式碼
  45. }
  46. //頁面程式碼開始
  47. $content = date('H:i:s jS F');
  48. echo $content;
  49. //頁面程式碼結束
  50. if (CACHEENABLE)
  51. $cache->write(1, $content); //首次運作或快取過期,產生快取
  52. */
  53. ?>
複製程式碼


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板