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


Posted in PHP onJuly 18, 2014

缓存技术在实际使用当中应用非常广泛,可以有效减轻对服务器数据库的访问压力,提高运行速度。目前很多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 相关文章推荐
同时提取多条新闻中的文本一例
Oct 09 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
深入php list()函数的详解
Jun 05 PHP
php共享内存段示例分享
Jan 20 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
php操作xml入门之cdata区段
Jan 23 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
PHP读取Excel类文件
May 15 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
php提高脚本性能的4个技巧
Aug 18 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 #PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 #PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 #PHP
ThinkPHP关于session的操作方法汇总
Jul 18 #PHP
php中实现精确设置session过期时间的方法
Jul 17 #PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 #PHP
浅谈php安全性需要注意的几点事项
Jul 17 #PHP
You might like
提升PHP执行速度全攻略(下)
2006/10/09 PHP
一些常用的php函数
2006/12/06 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
javascript 的Document属性和方法集合
2010/01/25 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
浅谈python对象数据的读写权限
2016/09/12 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
学生会个人自荐书范文
2014/02/12 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
企业员工薪酬方案
2014/06/04 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
网络销售员岗位职责
2015/04/11 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang