简单实用的网站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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
PHP个人网站架设连环讲(一)
Oct 09 PHP
PHP4与PHP5的时间格式问题
Feb 17 PHP
页面乱码问题的根源及其分析
Aug 09 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
php分页查询的简单实现代码
Mar 14 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
tensorflow输出权重值和偏差的方法
2018/02/10 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
美国翻新电子产品商店:The Store
2019/10/08 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
招聘与培训专员岗位职责
2014/01/30 职场文书
家长通知书教师评语
2014/04/17 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Python数据类型最全知识总结
2021/05/31 Python
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers