简单实用的网站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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
简单易用的计数器(数据库)
Oct 09 PHP
一些关于PHP的知识
Nov 17 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
php 访问oracle 存储过程实例详解
Jan 08 PHP
详解php与ethereum客户端交互
Apr 28 PHP
Smarty模板语法详解
Jul 20 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
php中array_fill函数的实例用法
Mar 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
PHP获取url的函数代码
2011/08/02 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
PHP Directory 函数的详解
2013/03/07 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python标记语句块使用方法总结
2019/08/05 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
网络文明传播志愿者活动方案
2014/08/20 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书