文章标题:Jaycn的PHP缓存类
PHP代码
- <?php
- /**********************************************************
- 用法:
- include "./config/connect.php"; //变量都在里面设置了
- $cache=new Cache();
- $cache->startToCacheFile() //自动处理缓存是否开启以及缓存是否存在,进行相应的处理
- .......
- 页面内容
- .......
- $cache->saveToCacheFile();
- **********************************************************/
- /*********************************************************************
- *用户需要事先定义的常量:已经在../config/config.php定义
- *_CachePath_ 模板缓存路径
- *_CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制
- *_ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存
- *********************************************************************/
- class Cache
- {
- var $cachefile;
- var $cachefilevar;
- var $startTime;
- /*********************************************************************
- *生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile
- *动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同
- *********************************************************************/
- function Cache()
- {
- $s=array(".","/");$r=array("_","");
- $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];
- $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);
- }
- /*开始时间
- function startTimer()
- {
- $mtime = microtime ();
- $mtime = explode (' ', $mtime);
- $mtime = $mtime[1] + $mtime[0];
- $this->startTime = $mtime;
- }
- //结束时间
- function endTimer()
- {
- $mtime = microtime ();
- $mtime = explode (' ', $mtime);
- $mtime = $mtime[1] + $mtime[0];
- $endtime = $mtime;
- $totaltime = round (($endtime - $this->startTime), 10); //单位秒
- return $totaltime;
- }
- //缓存所用的时间
- function spendTime()
- {
- return $this->endTimer()*1000; //单位毫秒
- }
- */
- //删除当前页/模块的缓存
- function cleanCacheFile()
- {
- //删除当前页的缓存
- $d = dir(_CachePath_);
- $strlen=strlen($this->cachefilevar);
- //返回当前页的所有Cache文件组
- while (false !== ($entry = $d->read()))
- {
- if (substr($entry,0,$strlen)==$this->cachefilevar)
- {
- if (!unlink(_CachePath_."/".$entry))
- {
- echo "Cache目录无法写入";
- exit;
- }
- }
- }
- }
- //判断是否已Cache过,以及是否需要Cache
- function checkCacheFile()
- {
- //如果设置了缓存更新间隔时间 _ReCacheTime_
- if (_ReCacheTime_+0>0)
- {
- //返回当前页Cache的最后更新时间
- $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];
- //如果更新时间超出更新间隔时间则删除Cache文件
- if (time()-$var>_ReCacheTime_)
- {
- $this->cleanCacheFile();
- $ischage=true;
- }
- }
- //返回当前页的Cache
- $file=_CachePath_."/".$this->cachefile;
- //判断当前页Cache是否存在 且 Cache功能是否开启
- return (file_exists($file) and _CacheEnable_ and !$ischange);
- }
- //读取Cache
- function echoCache()
- {
- //返回当前页的Cache
- $file=_CachePath_."/".$this->cachefile;
- //读取Cache文件的内容
- if (_CacheEnable_)
- return readfile($file);
- else
- return false;
- }
- //开始缓存
- function startToCacheFile()
- {
- if ($this->checkCacheFile())
- {
- //$this->startTimer(); //开始记录直接输出缓存内容所用的时间
- $this->echoCache();
- //echo $this->spendTime();//结果记录直接输出缓存内容所用的时间
- exit;
- }
- else
- {
- //$this->startTimer(); //开始记录第一次缓存内容所用的时间
- ob_clean();
- ob_start();
- ob_implicit_flush(0);
- }
- }
- //生成Cache
- function saveToCacheFile()
- {
- //取得当前页面的内容
- $output = ob_get_contents();
- //返回当前页的Cache
- $file=_CachePath_."/".$this->cachefile;
- //如果Cache功能开启
- if (_CacheEnable_)
- {
- //把输出的内容写入Cache文件
- $fp=@fopen($file,'w');
- if (!@fputs($fp,$output))
- {
- echo "模板Cache写入失败";
- exit;
- }
- @fclose($fp);
- //如果设置了缓存更新间隔时间 _ReCacheTime_
- if (_ReCacheTime_+0>0)
- {
- //更新当前页Cache的最后更新时间
- $file=_CachePath_."/".$this->cachefilevar;
- $fp=@fopen($file,'w');
- if (!@fwrite($fp,time()))
- {
- echo "Cache目录无法写入";
- exit;
- }
- @fclose($fp);
- }
- //$this->spendTime();//结果记录第一次缓存内容所用的时间
- }
- }
- } //end the cache Class
- ?>
责任编辑:semirock