下一篇 »« 上一篇提示:鼠标放在图片上用鼠标中键即可控制图片大小

文章标题:Jaycn的PHP缓存类

作者:    时间:2008-04-07    翻译网站:    点击:30299    本文共1篇文章
发表评论 | 查看评论 | 加入收藏 | Email给朋友 | 打印本文 | 字体:[ ]
标签:php缓存

PHP代码
  1. <?php   
  2. /**********************************************************  
  3. 用法:  
  4. include "./config/connect.php";  //变量都在里面设置了  
  5. $cache=new Cache();  
  6. $cache->startToCacheFile()    //自动处理缓存是否开启以及缓存是否存在,进行相应的处理  
  7. .......  
  8. 页面内容  
  9. .......  
  10. $cache->saveToCacheFile();  
  11. **********************************************************/  
  12.     
  13. /*********************************************************************  
  14. *用户需要事先定义的常量:已经在../config/config.php定义  
  15. *_CachePath_        模板缓存路径  
  16. *_CacheEnable_        自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制  
  17. *_ReCacheTime_        自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存  
  18. *********************************************************************/  
  19.     
  20. class Cache   
  21. {   
  22.     
  23.  var $cachefile;   
  24.  var $cachefilevar;   
  25.  var $startTime;   
  26.     
  27. /*********************************************************************  
  28. *生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile  
  29. *动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同  
  30. *********************************************************************/  
  31.  function Cache()    
  32.  {   
  33.    $s=array(".","/");$r=array("_","");   
  34.    $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];   
  35.    $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);   
  36.  }   
  37.     
  38.  /*开始时间  
  39.  function startTimer()   
  40.    {   
  41.        $mtime = microtime ();   
  42.        $mtime = explode (' ', $mtime);   
  43.        $mtime = $mtime[1] + $mtime[0];   
  44.        $this->startTime = $mtime;   
  45.    }     
  46.   //结束时间  
  47.  function endTimer()   
  48.    {   
  49.        $mtime = microtime ();   
  50.        $mtime = explode (' ', $mtime);   
  51.        $mtime = $mtime[1] + $mtime[0];   
  52.        $endtime = $mtime;   
  53.        $totaltime = round (($endtime - $this->startTime), 10); //单位秒  
  54.        return $totaltime;   
  55.    }   
  56.  //缓存所用的时间  
  57.  function spendTime()  
  58.   {  
  59.     return $this->endTimer()*1000;  //单位毫秒  
  60.   }  
  61.   */  
  62.      
  63.  //删除当前页/模块的缓存   
  64.  function cleanCacheFile()    
  65.  {   
  66.    //删除当前页的缓存   
  67.    $d = dir(_CachePath_);   
  68.    $strlen=strlen($this->cachefilevar);   
  69.    //返回当前页的所有Cache文件组   
  70.    while (false !== ($entry = $d->read()))    
  71.     {   
  72.       if (substr($entry,0,$strlen)==$this->cachefilevar)    
  73.       {   
  74.         if (!unlink(_CachePath_."/".$entry))    
  75.        {   
  76.           echo "Cache目录无法写入";   
  77.         exit;   
  78.         }   
  79.           }   
  80.        }   
  81.   }   
  82.     
  83.  //判断是否已Cache过,以及是否需要Cache   
  84.  function checkCacheFile()   
  85.  {   
  86.     //如果设置了缓存更新间隔时间 _ReCacheTime_   
  87.     if (_ReCacheTime_+0>0)          
  88.     {   
  89.        //返回当前页Cache的最后更新时间   
  90.        $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];   
  91.         //如果更新时间超出更新间隔时间则删除Cache文件   
  92.         if (time()-$var>_ReCacheTime_)    
  93.       {   
  94.            $this->cleanCacheFile();   
  95.       $ischage=true;   
  96.           }   
  97.       }   
  98.      //返回当前页的Cache   
  99.      $file=_CachePath_."/".$this->cachefile;   
  100.     //判断当前页Cache是否存在 且 Cache功能是否开启   
  101.     return (file_exists($fileand _CacheEnable_ and !$ischange);   
  102.  }   
  103.     
  104.  //读取Cache   
  105.  function echoCache()   
  106.  {   
  107.    //返回当前页的Cache   
  108.    $file=_CachePath_."/".$this->cachefile;   
  109.    //读取Cache文件的内容   
  110.    if (_CacheEnable_)    
  111.     return readfile($file);   
  112.        else    
  113.         return false;   
  114.   }   
  115.     
  116.  //开始缓存   
  117.  function startToCacheFile()   
  118.   {   
  119.     if ($this->checkCacheFile())   
  120.     {   
  121.       //$this->startTimer(); //开始记录直接输出缓存内容所用的时间   
  122.        $this->echoCache();   
  123.     //echo $this->spendTime();//结果记录直接输出缓存内容所用的时间   
  124.     exit;   
  125.       }   
  126.         else    
  127.           {    
  128.          //$this->startTimer(); //开始记录第一次缓存内容所用的时间   
  129.             ob_clean();   
  130.             ob_start();   
  131.             ob_implicit_flush(0);   
  132.       }   
  133.   }   
  134.     
  135.     
  136.  //生成Cache   
  137.  function saveToCacheFile()   
  138.  {    
  139.    //取得当前页面的内容   
  140.   $output = ob_get_contents();   
  141.    //返回当前页的Cache   
  142.    $file=_CachePath_."/".$this->cachefile;   
  143.    //如果Cache功能开启   
  144.     if (_CacheEnable_)    
  145.     {   
  146.         //把输出的内容写入Cache文件   
  147.         $fp=@fopen($file,'w');   
  148.         if (!@fputs($fp,$output))    
  149.        {   
  150.          echo "模板Cache写入失败";   
  151.        exit;   
  152.       }   
  153.         @fclose($fp);   
  154.         //如果设置了缓存更新间隔时间 _ReCacheTime_   
  155.         if (_ReCacheTime_+0>0)    
  156.         {   
  157.            //更新当前页Cache的最后更新时间   
  158.            $file=_CachePath_."/".$this->cachefilevar;   
  159.            $fp=@fopen($file,'w');   
  160.            if (!@fwrite($fp,time()))    
  161.           {   
  162.             echo "Cache目录无法写入";   
  163.             exit;   
  164.           }   
  165.            @fclose($fp);   
  166.         }   
  167.   //$this->spendTime();//结果记录第一次缓存内容所用的时间      
  168.      }   
  169.   }   
  170.     
  171. //end the cache Class    
  172. ?>   
责任编辑:semirock
发表评论
密码: (游客不需要密码)
记住我【Alt+S 或 Ctrl+Enter 快速提交】