简单实用的网站PHP缓存类实例

5年以前  |  阅读数:1148 次  |  编程语言:PHP 

缓存技术在实际使用当中应用非常广泛,可以有效减轻对服务器数据库的访问压力,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。本文以一个简单实用的缓存类为例,帮助大家参考下缓存的机制与写法。

缓存文件cache.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);  
        //返回当前页的所有太原264医院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  
      define("_CachePath_","./cache/");  
      define("_CacheEnable_","1");  
      define("_ReCacheTime_","43200");  
      include('cache.php');  
      $cache=new cache();  
      if ($cache->check())  
      {  
        $template=$cache->read();  
      } 
      else  
      {  
        ob_start();  
        ob_implicit_flush(0);  
    ?>  
      此处为页面内容。。。。  
    <?php  
        $template = ob_get_contents();  
        $cache->write($template);  
      }  
    ?>
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
贪吃蛇
文件下载
获取IMEI
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例