php缓存技术_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > php缓存技术

php缓存技术

 2011/1/2 10:31:48  joan0106  http://joan0106.javaeye.com  我要评论(0)
  • 摘要:缓存在实际使用当中应用很广泛,可以减轻对服务器数据库的访问,提高访问速度.例:<?php/**用户需要事先定义的常量:*_CachePath_模板缓存路径*_CacheEnable_自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制*_ReCacheTime_自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存*/classcache{var$cachefile;var$cachefilevar;functioncache()
  • 标签:PHP 技术

?? 缓存在实际使用当中应用很广泛,可以减轻对服务器 数据库访问,提高访问速度.

?

?? 例:

<?php
    /*
     *用户需要事先定义的常量:
     *_CachePath_          模板缓存路径
     *_CacheEnable_        自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制
     *_ReCacheTime_        自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存
    */

   class cache {

   var $cachefile;
   var $cachefilevar;

   function cache() {
           //生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile
           //动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有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 delete() {
           //删除当前页的缓存
           $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 check() {
           //如果设置了缓存更新间隔时间 _ReCacheTime_
           if (_ReCacheTime_+0>0)        {
                   //返回当前页Cache的最后更新时间
                   $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];
                   //如果更新时间超出更新间隔时间则删除Cache文件
                   if (time()-$var>_ReCacheTime_) {
                           $this->delete();$ischage=true;
                   }
           }
           //返回当前页的Cache
           $file=_CachePath_."/".$this->cachefile;
           //判断当前页Cache是否存在 且 Cache功能是否开启
           return (file_exists($file) and _CacheEnable_ and !$ischange);
   }

   //读取Cache
   function read() {
           //返回当前页的Cache
           $file=_CachePath_."/".$this->cachefile;
           //读取Cache文件的内容
           if (_CacheEnable_) return readfile($file);
           else return false;
   }

   //生成Cache
   function write($output) {
           //返回当前页的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);
                   }
           }
   }

   }
 ?> 
PHP调用代码:

<?php
  define("_CachePath_","./cache/");
  define("_CacheEnable_","./l/");
  define("_CacheTime_","180");
  include("index.php");
  $cache=new cache;
  $cache->cache();
  if($cache-> check()){
     $template=$cache->read();
  }else{
      ob_start();
      ob_implicit_flush(0);
  }

?>

<?php
  include("index.php");
  $cache=new cache;
  $template=ob_get_contents();
  $cache->write($template);
?>?

发表评论
用户名: 匿名