简单实用的网站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使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
YII路径的用法总结
Jul 09 PHP
yii中widget的用法
Dec 03 PHP
Laravel 5 学习笔记
Mar 06 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 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
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
php如何获取文件的扩展名
2015/10/28 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
Python类的基础入门知识
2008/11/24 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
Python批量查询域名是否被注册过
2017/06/21 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
Python判断有效的数独算法示例
2019/02/23 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
日本小田急百货官网:Odakyu
2018/07/19 全球购物
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
银行服务感言
2014/03/01 职场文书
筑梦中国心得体会
2016/01/18 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python