简单实用的网站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 Cookie的使用教程详解
Jun 03 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
最常用的8款PHP调试工具
Jul 06 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
thinkphp实现图片上传功能
Jan 13 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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中的CMS的涵义
2007/03/11 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
dedecms中使用php语句指南
2014/11/13 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
python中cPickle用法例子分享
2014/01/03 Python
对Python w和w+权限的区别详解
2019/01/23 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python实现视频分帧效果
2019/05/31 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
个人自我评价分享
2013/12/20 职场文书
五一手机促销方案
2014/03/08 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
先进基层党组织材料
2014/12/25 职场文书
《司马光》教学反思
2016/02/22 职场文书
Python基础详解之描述符
2021/04/28 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS