PHP文件缓存类实现代码
php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。
页面缓存类
代码如下 :
<?php /*include("cache.php"); $cache=newcache(30); $cache->cacheCheck(); echodate("Y-m-dH:i:s"); $cache->caching();*/ classcache{ //缓存目录 var$cacheRoot="./cache/"; //缓存更新时间秒数,0为不缓存 var$cacheLimitTime=3; //缓存文件名 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(); //echo$cacheContent; 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; } } ?>
上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)
给大家介绍一个Memcache缓存,算是内存缓存。
代码如下
<?php $memcache=newMemcache; $memcache->connect('localhost',11211)ordie("Couldnotconnect"); $version=$memcache->getVersion(); echo"Server'sversion:".$version."n"; $tmp_object=newstdClass; $tmp_object->str_attr='test'; $tmp_object->int_attr=123; $memcache->set('key',$tmp_object,false,10)ordie("Failedtosavedataattheserver"); echo"Storedatainthecache(datawillexpirein10seconds)n"; $get_result=$memcache->get('key'); echo"Datafromthecache:n"; var_dump($get_result); ?>
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
以上就是本文的全部内容,希望对大家学习php缓存有所帮助。