php文件缓存类文件

本人给大家推一个不错php文件缓存类文件,从各方面来看本缓存类很合理并且适用于大型网站使用,php文件缓存类文件代码如下:

  1. <?php
  2. class Cache {
  3. /** 缓存目录 **/
  4. var $CacheDir = './c';
  5. /** 缓存的文件 **/
  6. var $CacheFile = '';
  7. /** 文件缓存时间(分钟) **/
  8. var $CacheTime = 0;
  9. /** 文件是否已缓存 **/
  10. var $CacheFound = False;
  11. /** 错误及调试信息 **/
  12. var $DebugMsg = NULL;
  13. function Cache($CacheTime = 0) {
  14. $this->CacheTime = $CacheTime;
  15. }
  16. private function Run() {
  17. /** 缓存时间大于0,检测缓存文件的修改时间,在缓存时间内为缓存文件名,超过缓存时间为False,
  18. 小于等于0,返回false,并清理已缓存的文件
  19. **/
  20. Return $this->CacheTime ? $this->CheckCacheFile() : $this->CleanCacheFile();
  21. }
  22. function GetCache($VistUrl,$CacheFileType = 'html')
  23. {
  24. $this->SetCacheFile($VistUrl,$CacheFileType);
  25. $fileName=$this->CheckCacheFile();
  26. if($fileName)
  27. {
  28. $fp = fopen($fileName,"r");
  29. $content_= fread($fp, filesize($fileName));
  30. fclose($fp);
  31. return $content_;
  32. }
  33. else
  34. {
  35. return false;
  36. }
  37. }
  38. private function SetCacheFile($VistUrl,$CacheFileType = 'html') {
  39. if(emptyempty($VistUrl)) {
  40. /** 默认为index.html **/
  41. $this->CacheFile = 'index';
  42. }else {
  43. /** 传递参数为$_POST时 **/
  44. $this->CacheFile = is_array($VistUrl) ? implode('.',$VistUrl) : $VistUrl;
  45. }
  46. $this->CacheFile = $this->CacheDir.'/'.md5($this->CacheFile);
  47. $this->CacheFile.= '.'.$CacheFileType;
  48. }
  49. function SetCacheTime($t = 60) {
  50. $this->CacheTime = $t;
  51. }
  52. private function CheckCacheFile() {
  53. if(!$this->CacheTime || !file_exists($this->CacheFile)) {Return False;}
  54. /** 比较文件的建立/修改日期和当前日期的时间差 **/
  55. $GetTime=(Time()-Filemtime($this->CacheFile))/(60*1);
  56. /** Filemtime函数有缓存,注意清理 **/
  57. Clearstatcache();
  58. $this->Debug('Time Limit '.($GetTime*60).'/'.($this->CacheTime*60).'');
  59. $this->CacheFound = $GetTime <= $this->CacheTime ? $this->CacheFile : False;
  60. Return $this->CacheFound;
  61. }
  62. function SaveToCacheFile($VistUrl,$Content,$CacheFileType = 'html') {
  63. $this->SetCacheFile($VistUrl,$CacheFileType);
  64. if(!$this->CacheTime) {
  65. Return False;
  66. }
  67. /** 检测缓存目录是否存在 **/
  68. if(true === $this->CheckCacheDir()) {
  69. $CacheFile = $this->CacheFile;
  70. $CacheFile = str_replace('//','/',$CacheFile);
  71. $fp = @fopen($CacheFile,"wb");
  72. if(!$fp) {
  73. $this->Debug('Open File '.$CacheFile.' Fail');
  74. }else {
  75. if(@!fwrite($fp,$Content)){
  76. $this->Debug('Write '.$CacheFile.' Fail');
  77. }else {
  78. $this->Debug('Cached File');
  79. };
  80. @fclose($fp);
  81. }
  82. }else {
  83. /** 缓存目录不存在,或不能建立目录 **/
  84. $this->Debug('Cache Folder '.$this->CacheDir.' Not Found');
  85. }
  86. }
  87. private function CheckCacheDir() {
  88. if(file_exists($this->CacheDir)) { Return true; }
  89. /** 保存当前工作目录 **/
  90. $Location = getcwd();
  91. /** 把路径划分成单个目录 **/
  92. $Dir = split("/", $this->CacheDir);
  93. /** 循环建立目录 **/
  94. $CatchErr = True;
  95. for ($i=0; $i<count($Dir); $i++){
  96. if (!file_exists($Dir[$i])){
  97. /** 建立目录失败会返回False 返回建立最后一个目录的返回值 **/
  98. $CatchErr = @mkdir($Dir[$i],0777);
  99. }
  100. @chdir($Dir[$i]);
  101. }
  102. /** 建立完成后要切换到原目录 **/
  103. chdir($Location);
  104. if(!$CatchErr) {
  105. $this->Debug('Create Folder '.$this->CacheDir.' Fail');
  106. }
  107. Return $CatchErr;
  108. }
  109. private function CleanCacheFile() {
  110. if(file_exists($this->CacheFile)) {
  111. @chmod($this->CacheFile,777);
  112. @unlink($this->CacheFile);
  113. }
  114. /** 置没有缓存文件 **/
  115. $this->CacheFound = False;
  116. Return $this->CacheFound;
  117. }
  118. function Debug($msg='') {
  119. if(DEBUG) {
  120. $this->DebugMsg[] = '[Cache]'.$msg;
  121. }
  122. }
  123. function GetError() {
  124. Return emptyempty($this->DebugMsg) ? '' : "<br>n".implode("<br>n",$this->DebugMsg);//开源代码phpfensi.com
  125. }
  126. }/* end of class */
  127. ?>