简单实用的网站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中for循环语句的几种变型
Mar 16 PHP
php at(@)符号的用法简介
Jul 11 PHP
基于PHP常用函数的用法详解
May 10 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
thinkphp分页实现效果
Oct 13 PHP
php 输出json及显示json中的中文汉字详解及实例
Nov 09 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
Feb 16 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
详细解读php的命名空间(一)
Feb 21 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP计数器的实现代码
2013/06/08 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
python打开网页和暂停实例
2014/09/30 Python
python中range()与xrange()用法分析
2016/09/21 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
python实现按行分割文件
2019/07/22 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
绿化工程实施方案
2014/03/17 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
python小程序之飘落的银杏
2021/04/17 Python
java基础——多线程
2021/07/03 Java/Android