简单实用的网站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+ajax 无刷新删除数据
Feb 20 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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上传文件的增强函数
2010/07/21 PHP
php编写一个简单的路由类
2011/04/13 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
网站接入QQ登录的两种方法
2014/07/22 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python函数嵌套实例
2014/09/23 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
如何验证python安装成功
2020/07/06 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
美国校服网上商店:French Toast
2019/10/08 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
思想品德课教学反思
2014/02/10 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
计算机实训心得体会
2016/01/14 职场文书
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫