国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php實現網頁緩存的工具類分享

2024-05-04 23:37:49
字體:
來源:轉載
供稿:網友

本文給大家分享的是php實現網頁緩存的工具類的代碼及使用方法,非常的實用,有需要的小伙伴可以參考下。

php程序在抵抗大流量訪問的時候動態網站往往都是難以招架,所以要引入緩存機制,一般情況下有兩種類型緩存

一、文件緩存

二、數據查詢結果緩存,使用內存來實現高速緩存

本例主要使用文件緩存。

主要原理使用緩存函數來存儲網頁顯示結果,如果在規定時間里再次調用則可以加載緩存文件。

工具類代碼:

 

 
  1. // 文件緩存類 
  2. class Cache { 
  3. /** 
  4. * $dir : 緩存文件存放目錄 
  5. * $lifetime : 緩存文件有效期,單位為秒 
  6. * $cacheid : 緩存文件路徑,包含文件名 
  7. * $ext : 緩存文件擴展名(可以不用),這里使用是為了查看文件方便 
  8. */ 
  9. private $dir; 
  10. private $lifetime; 
  11. private $cacheid; 
  12. private $ext; 
  13. /** 
  14. * 析構函數,檢查緩存目錄是否有效,默認賦值 
  15. */ 
  16. function __construct($dir = '', $lifetime = 1800) { 
  17. if ($this->dir_isvalid ( $dir )) { 
  18. $this->dir = $dir; 
  19. $this->lifetime = $lifetime; 
  20. $this->ext = '.Php'
  21. $this->cacheid = $this->getcacheid (); 
  22. /** 
  23. * 檢查緩存是否有效 
  24. */ 
  25. private function isvalid() { 
  26. if (! file_exists ( $this->cacheid )) 
  27. return false
  28. if (! (@$mtime = filemtime ( $this->cacheid ))) 
  29. return false
  30. if (mktime () - $mtime > $this->lifetime) 
  31. return false
  32. return true
  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. case 0 : 
  42. $content = ob_get_contents (); 
  43. break
  44. default : 
  45. break
  46. ob_end_flush (); 
  47. try { 
  48. file_put_contents ( $this->cacheid, $content ); 
  49. catch ( Exception $e ) { 
  50. $this->error ( '寫入緩存失敗!請檢查目錄權限!' ); 
  51. /** 
  52. * 加載緩存 
  53. * exit() 載入緩存后終止原頁面程序的執行,緩存無效則運行原頁面程序生成緩存 
  54. * ob_start() 開啟瀏覽器緩存用于在頁面結尾處取得頁面內容 
  55. */ 
  56. public function load() { 
  57. if ($this->isvalid ()) { 
  58. // 以下兩種方式,哪種方式好????? 
  59. require_once ($this->cacheid); 
  60. echo "<!--緩存-->"
  61. // echo file_get_contents($this->cacheid); 
  62. exit (); 
  63. else { 
  64. ob_start (); 
  65. /** 
  66. * 清除緩存 
  67. */ 
  68. public function clean() { 
  69. try { 
  70. unlink ( $this->cacheid ); 
  71. catch ( Exception $e ) { 
  72. $this->error ( '清除緩存文件失敗!請檢查目錄權限!' ); 
  73. /** 
  74. * 取得緩存文件路徑 
  75. */ 
  76. private function getcacheid() { 
  77. return $this->dir . md5 ( $this->geturl () ) . $this->ext; 
  78. /** 
  79. * 檢查目錄是否存在或是否可創建 
  80. */ 
  81. private function dir_isvalid($dir) { 
  82. if (is_dir ( $dir )) 
  83. return true
  84. try { 
  85. mkdir ( $dir, 0777 ); 
  86. catch ( Exception $e ) { 
  87. $this->error ( '所設定緩存目錄不存在并且創建失敗!請檢查目錄權限!' ); 
  88. return false
  89. return true
  90. /** 
  91. * 取得當前頁面完整url 
  92. */ 
  93. private function geturl() { 
  94. $url = ''
  95. if (isset ( $_SERVER ['REQUEST_URI'] )) { 
  96. $url = $_SERVER ['REQUEST_URI']; 
  97. else { 
  98. $url = $_SERVER ['Php_SELF']; 
  99. $url .= empty ( $_SERVER ['QUERY_STRING'] ) ? '' : '?' . $_SERVER ['QUERY_STRING']; 
  100. return $url; 
  101. /** 
  102. * 輸出錯誤信息 
  103. */ 
  104. private function error($str) { 
  105. echo '<div style="color:red;">' . $str . '</div>'

使用方法:

使用方法如下:

一部分代碼放在要被緩存邏輯代碼前面:

 

 
  1. $cachedir = './Cache/'// 設定緩存目錄 
  2. $cache = new Cache ( $cachedir, 33 ); // 省略參數即采用缺省設置, $cache = new Cache($cachedir); 
  3. if (@$_GET ['cacheact'] != 'rewrite' || @$_GET ['clearCache'] == 'ok'// 此處為一技巧,通過xx.Php?cacheact=rewrite更新緩存,以此類推,還可以設定一些其它操作 
  4. $cache->load (); // 裝載緩存,緩存有效則不執行以下頁面代碼 
  5. // 頁面代碼開始 

一部分放在被緩存邏輯代碼后面:

 

 
  1. // 頁面代碼結束 
  2. $cache->write (); // 首次運行或緩存過期,生成緩存 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏东市| 蓝山县| 湖口县| 开江县| 铜鼓县| 栾川县| 宝丰县| 塔河县| 麟游县| 新余市| 墨脱县| 西青区| 兴海县| 奈曼旗| 类乌齐县| 家居| 广德县| 轮台县| 陆丰市| 太谷县| 泾阳县| 外汇| 朔州市| 蒙自县| 敦化市| 静海县| 墨竹工卡县| 潼南县| 浠水县| 江城| 潮州市| 云和县| 望谟县| 南川市| 吴忠市| 宣化县| 西充县| 夏河县| 界首市| 永康市| 闵行区|