一个简洁实用的PHP缓存类完整实例
本文完整描述了一个简洁实用的PHP缓存类,可用来检查缓存文件是否在设置更新时间之内、清除缓存文件、根据当前动态文件生成缓存文件名、连续创建目录、缓存文件输出静态等功能。对于采用PHP开发CMS系统来说,离不开对缓存的处理,合理利用好缓存可有效的提高程序执行效率。
php缓存类文件完整代码如下:
<?php /* *缓存类cache */ classcache{ //缓存目录 var$cacheRoot="./cache/"; //缓存更新时间秒数,0为不缓存 var$cacheLimitTime=0; //缓存文件名 var$cacheFileName=""; //缓存扩展名 var$cacheFileExt="php"; /* *构造函数 *int$cacheLimitTime缓存更新时间 */ functioncache($cacheLimitTime){ if(intval($cacheLimitTime)) $this->cacheLimitTime=$cacheLimitTime; $this->cacheFileName=$this->getCacheFileName(); ob_start(); } /* *检查缓存文件是否在设置更新时间之内 *返回:如果在更新时间之内则返回文件内容,反之则返回失败 */ functioncacheCheck(){ if(file_exists($this->cacheFileName)){ $cTime=$this->getFileCreateTime($this->cacheFileName); if($cTime+$this->cacheLimitTime>time()){ echofile_get_contents($this->cacheFileName); ob_end_flush(); exit; } } returnfalse; } /* *缓存文件或者输出静态 *string$staticFileName静态文件名(含相对路径) */ functioncaching($staticFileName=""){ if($this->cacheFileName){ $cacheContent=ob_get_contents(); ob_end_flush(); if($staticFileName){ $this->saveFile($staticFileName,$cacheContent); } if($this->cacheLimitTime) $this->saveFile($this->cacheFileName,$cacheContent); } } /* *清除缓存文件 *string$fileName指定文件名(含函数)或者all(全部) *返回:清除成功返回true,反之返回false */ functionclearCache($fileName="all"){ if($fileName!="all"){ $fileName=$this->cacheRoot.strtoupper(md5($fileName)).".".$this->cacheFileExt; if(file_exists($fileName)){ return@unlink($fileName); }elsereturnfalse; } if(is_dir($this->cacheRoot)){ if($dir=@opendir($this->cacheRoot)){ while($file=@readdir($dir)){ $check=is_dir($file); if(!$check) @unlink($this->cacheRoot.$file); } @closedir($dir); returntrue; }else{ returnfalse; } }else{ returnfalse; } } /*根据当前动态文件生成缓存文件名*/ functiongetCacheFileName(){ return$this->cacheRoot.strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt; } /* *缓存文件建立时间 *string$fileName缓存文件名(含相对路径) *返回:文件生成时间秒数,文件不存在返回0 */ functiongetFileCreateTime($fileName){ if(!trim($fileName))return0; if(file_exists($fileName)){ returnintval(filemtime($fileName)); }elsereturn0; } /* *保存文件 *string$fileName文件名(含相对路径) *string$text文件内容 *返回:成功返回ture,失败返回false */ functionsaveFile($fileName,$text){ if(!$fileName||!$text)returnfalse; if($this->makeDir(dirname($fileName))){ if($fp=fopen($fileName,"w")){ if(@fwrite($fp,$text)){ fclose($fp); returntrue; }else{ fclose($fp); returnfalse; } } } returnfalse; } /* *连续建目录 *string$dir目录字符串 *int$mode权限数字 *返回:顺利创建或者全部已建返回true,其它方式返回false */ functionmakeDir($dir,$mode="0777"){ if(!$dir)return0; $dir=str_replace("\\","/",$dir); $mdir=""; foreach(explode("/",$dir)as$val){ $mdir.=$val."/"; if($val==".."||$val=="."||trim($val)=="")continue; if(!file_exists($mdir)){ if(!@mkdir($mdir,$mode)){ returnfalse; } } } returntrue; } } ?>
使用该缓存类的时候可将以上代码保存为cache.php,具体用法如下所示:
include("cache.php"); $cache=newcache(30); $cache->cacheCheck(); echodate("Y-m-dH:i:s"); $cache->caching();