简单实用的网站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 相关文章推荐
检查php文件中是否含有bom的函数
May 31 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
php实现的mongodb操作类
May 28 PHP
php 类自动载入的方法
Jun 03 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
PHP会话处理的10个函数
Aug 11 PHP
分享10段PHP常用代码
Nov 11 PHP
PDO::getAttribute讲解
Jan 28 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 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 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php生成图片验证码
2015/06/09 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
详解webpack babel的配置
2018/01/09 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
python分割和拼接字符串
2013/11/01 Python
python中二维阵列的变换实例
2014/10/09 Python
自学python的建议和周期预算
2019/01/30 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
数学系毕业生求职信
2014/05/29 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
责任书格式
2019/04/18 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
Win11 BitLocker 驱动器加密
2022/04/19 数码科技
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android