简单实用的网站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初学者头疼问题总结
Jul 08 PHP
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
第三节--定义一个类
Nov 16 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
PHP删除数组中指定下标的元素方法
Feb 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中协程和阻塞的一些理解与思考
2017/08/11 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Python装饰器知识点补充
2018/05/28 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
银行奉献演讲稿
2014/09/16 职场文书
情人节活动总结范文
2015/02/05 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
用php如何解决大文件分片上传问题
2021/07/07 PHP
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers