一个不错php文件缓存类文件
本人给大家推一个不错php文件缓存类文件,从各方面来看本缓存类很合理并且适用于大型网站使用哦,有需要的朋友可参考参考。
<?php class Cache { /** 缓存目录 **/ var $CacheDir = './c'; /** 缓存的文件 **/ var $CacheFile = ''; /** 文件缓存时间(分钟) **/ var $CacheTime = 0; /** 文件是否已缓存 **/ var $CacheFound = False; /** 错误及调试信息 **/ var $DebugMsg = NULL; function Cache($CacheTime = 0) { $this->CacheTime = $CacheTime; } private function Run() { /** 缓存时间大于0,检测缓存文件的修改时间,在缓存时间内为缓存文件名,超过缓存时间为False, 小于等于0,返回false,并清理已缓存的文件 * */ Return $this->CacheTime ? $this->CheckCacheFile() : $this->CleanCacheFile(); } function GetCache($VistUrl, $CacheFileType = 'html') { $this->SetCacheFile($VistUrl, $CacheFileType); $fileName = $this->CheckCacheFile(); if ($fileName) { $fp = fopen($fileName, "r"); $content_ = fread($fp, filesize($fileName)); fclose($fp); return $content_; } else { return false; } } private function SetCacheFile($VistUrl, $CacheFileType = 'html') { if (empty($VistUrl)) { /** 默认为index.html **/ $this->CacheFile = 'index'; } else { /** 传递参数为$_POST时 **/ $this->CacheFile = is_array($VistUrl) ? implode('.', $VistUrl) : $VistUrl; } $this->CacheFile = $this->CacheDir . '/' . md5($this->CacheFile); $this->CacheFile.= '.' . $CacheFileType; } function SetCacheTime($t = 60) { $this->CacheTime = $t; } private function CheckCacheFile() { if (!$this->CacheTime || !file_exists($this->CacheFile)) { Return False; } /** 比较文件的建立/修改日期和当前日期的时间差 **/ $GetTime = (Time() - Filemtime($this->CacheFile)) / (60 * 1); /** Filemtime函数有缓存,注意清理 **/ Clearstatcache(); $this->Debug('Time Limit ' . ($GetTime * 60) . '/' . ($this->CacheTime * 60) . ''); $this->CacheFound = $GetTime <= $this->CacheTime ? $this->CacheFile : False; Return $this->CacheFound; } function SaveToCacheFile($VistUrl, $Content, $CacheFileType = 'html') { $this->SetCacheFile($VistUrl, $CacheFileType); if (!$this->CacheTime) { Return False; } /** 检测缓存目录是否存在 **/ if (true === $this->CheckCacheDir()) { $CacheFile = $this->CacheFile; $CacheFile = str_replace('//', '/', $CacheFile); $fp = @fopen($CacheFile, "wb"); if (!$fp) { $this->Debug('Open File ' . $CacheFile . ' Fail'); } else { if (@!fwrite($fp, $Content)) { $this->Debug('Write ' . $CacheFile . ' Fail'); } else { $this->Debug('Cached File'); }; @fclose($fp); } } else { /** 缓存目录不存在,或不能建立目录 **/ $this->Debug('Cache Folder ' . $this->CacheDir . ' Not Found'); } } private function CheckCacheDir() { if (file_exists($this->CacheDir)) { Return true; } /** 保存当前工作目录 **/ $Location = getcwd(); /** 把路径划分成单个目录 **/ $Dir = split("/", $this->CacheDir); /** 循环建立目录 **/ $CatchErr = True; for ($i = 0; $i < count($Dir); $i++) { if (!file_exists($Dir[$i])) { /** 建立目录失败会返回False 返回建立最后一个目录的返回值 **/ $CatchErr = @mkdir($Dir[$i], 0777); } @chdir($Dir[$i]); } /** 建立完成后要切换到原目录 **/ chdir($Location); if (!$CatchErr) { $this->Debug('Create Folder ' . $this->CacheDir . ' Fail'); } Return $CatchErr; } private function CleanCacheFile() { if (file_exists($this->CacheFile)) { @chmod($this->CacheFile, 777); @unlink($this->CacheFile); } /** 置没有缓存文件 **/ $this->CacheFound = False; Return $this->CacheFound; } function Debug($msg = '') { if (DEBUG) { $this->DebugMsg[] = '[Cache]' . $msg; } } function GetError() { Return empty($this->DebugMsg) ? '' : "<br>n" . implode("<br>n", $this->DebugMsg); } } /* end of class */ ?>
教程网址:http://www.phprm.com/frame/php1005358.html
欢迎收藏∩_∩但请保留本文链接。