PHP 캐싱 클래스

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

  1. demo.php:
  2. /*
  3. * 자유롭게 복제 및 사용할 수 있습니다. 저작권 정보를 유지하시기 바랍니다. , 이용해 주셔서 감사합니다!
  4. * 클래스 이름: Cache (For Php5)
  5. * 버전: 1.0
  6. * 설명: 동적 캐시 클래스, 페이지를 제어하여 자동으로 캐시 생성, 캐시 호출, 업데이트를 수행하는 데 사용됩니다. 캐시를 삭제하고 캐시를 삭제하세요.
  7. * 작성자 : jiangjun8528@163.com,Junin
  8. * 작성자 페이지 : http://blog.csdn.Net/sdts/
  9. * 최종 수정일 : 2007-8-22
  10. * 비고:
  11. 1. 이 버전은 Php5 버전입니다. 아직 Php4 버전을 작성하지 않았습니다. 필요하시면 참고하셔서 직접 수정해 보세요. !).
  12. 2. 이 버전은 utf-8로 인코딩되어 있습니다. 웹사이트에서 다른 인코딩을 사용하는 경우 Windows 시스템의 경우 메모장을 사용하여 열고 저장한 후 해당 인코딩(일반적으로 ANSI)을 선택하세요. .Linux의 경우 해당 편집 소프트웨어 또는 iconv 명령줄을 사용하세요.
  13. 3. 위의 항목 2를 무시하세요.
  14. * 캐싱에 대한 몇 가지 생각:
  15. * 동적 캐싱의 근본적인 차이점 정적 캐싱은 사용자가 페이지에 액세스하는 과정이 캐시를 생성하고, 캐시를 탐색하고, 업데이트하는 과정이라는 것입니다.
  16. * 정적 캐싱은 정적 페이지를 생성하는 것을 말합니다. 작업은 일반적으로 웹사이트 백그라운드에서 완료되며 수동 작업(즉, 수동 생성)이 필요합니다.
  17. */
  18. /*
  19. * 사용 예
  20. ------ --------------------------데모1--- ------- -------
  21. require_once('cache .inc.php');
  22. $cachedir = './Cache/'; //캐시 디렉토리 설정
  23. $cache = new Cache($cachedir,10); //매개변수를 생략하고 기본 설정을 사용합니다. $cache = new Cache($cachedir);
  24. if ($_GET[ 'cacheact'] != 'rewrite') //여기 트릭이 있습니다. xx.Php?cacheact=rewrite를 통해 캐시를 업데이트하면 비유적으로 다른 작업도 설정할 수 있습니다.
  25. $cache-> load(); //캐시를 로드합니다. 캐시가 유효하면 다음 페이지 코드는 실행되지 않습니다.
  26. //페이지 코드가 시작됩니다.
  27. echo date('H :i:s jS F');
  28. //페이지 끝 코드
  29. $cache->write(); //첫 번째 실행 또는 캐시 만료, 캐시 생성
  30. ------ -------- --------------------------데모2------ ----- ------
  31. require_once('cache.inc.php');
  32. $cachedir = './Cache/'; /캐시 디렉토리 설정
  33. $cache = new Cache($cachedir,10); //매개변수를 생략하고 기본 설정을 사용합니다. $cache = new Cache($cachedir);
  34. if ($_GET[' 캐시액트'] != 'rewrite') //여기 트릭이 있습니다. xx.Php?cacheact=rewrite를 통해 캐시를 업데이트하는 등 다른 작업도 설정할 수 있습니다.
  35. $cache- >load() ; //캐시를 로드합니다. 캐시가 유효하면 다음 페이지 코드는 실행되지 않습니다.
  36. //페이지 코드가 시작됩니다.
  37. $content = date('H:i:s jS F');
  38. echo $content;
  39. //페이지 코드 끝
  40. $cache->write(1,$content) //첫 번째 실행 또는 캐시 만료, 캐시 생성
  41. --- ---- ------데모3------------- --- -----------------------
  42. require_once('cache. inc.php');
  43. 정의('CACHEENABLE',true );
  44. if (CACHEENABLE) {
  45. $cachedir = './Cache/'; //캐시 디렉토리 설정
  46. $cache = new Cache($cachedir,10); //생략됨 매개변수는 기본 설정 $cache = new Cache($cachedir);
  47. if ($_GET['cacheact'] != 'rewrite' ) //이것은 xx.Php?cacheact= rewrite를 통해 캐시를 업데이트하는 등의 방법입니다.
  48. $cache->load() //캐시를 로드합니다. 캐시가 유효하면 다음 페이지 코드는 실행되지 않습니다.
  49. }
  50. //페이지 코드 시작
  51. $content = date('H:i:s jS F');
  52. echo $content ;
  53. //페이지 끝 코드
  54. if (CACHEENABLE)
  55. $cache-> ;write(1,$content) //첫 번째 실행 또는 캐시 만료, 캐시 생성
  56. */
  57. ?>
코드 복사

PHP


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿