简单实用的PHP文本缓存类实例


Posted in PHP onMarch 22, 2019

缓存在实际使用当中应用很广泛,可以减轻对服务器数据库的访问,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。下面是一个写得不错的缓存类,可以参考下缓存的机制与写法。

cache.inc.php

<?php
class Cache {
 /**
 * $dir : 缓存文件存放目录
 * $lifetime : 缓存文件有效期,单位为秒
 * $cacheid : 缓存文件路径,包含文件名
 * $ext : 缓存文件扩展名(可以不用),这里使用是为了查看文件方便
 */
 private $dir;
 private $lifetime;
 private $cacheid;
 private $ext;
 /**
 * 析构函数,检查缓存目录是否有效,默认赋值
 */
 function __construct($dir='',$lifetime=1800) {
  if ($this--->dir_isvalid($dir)) {
   $this->dir = $dir;
   $this->lifetime = $lifetime;
   $this->ext = '.Php';
   $this->cacheid = $this->getcacheid();
  }
 }
 /**
 * 检查缓存是否有效
 */
 private function isvalid() {
  if (!file_exists($this->cacheid)) return false;
  if (!(@$mtime = filemtime($this->cacheid))) return false;
  if (mktime() - $mtime > $this->lifetime) return false;
  return true;
 }
 /**
 * 写入缓存
 * $mode == 0 , 以浏览器缓存的方式取得页面内容
 * $mode == 1 , 以直接赋值(通过$content参数接收)的方式取得页面内容
 * $mode == 2 , 以本地读取(fopen ile_get_contents)的方式取得页面内容(似乎这种方式没什么必要)
 */
 public function write($mode=0,$content='') {
  switch ($mode) {
   case 0:
    $content = ob_get_contents();
    break;
   default:
    break;
  }
  ob_end_flush();
  try {
   file_put_contents($this->cacheid,$content);
  }
  catch (Exception $e) {
   $this->error('写入缓存失败!请检查目录权限!');
  }
 }
 /**
 * 加载缓存
 * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存
 * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容
 */
 public function load() {
  if ($this->isvalid()) {
   echo "This is Cache. ";
   //以下两种方式,哪种方式好?????
   require_once($this->cacheid);
   //echo file_get_contents($this->cacheid);
   exit();
  }
  else {
   ob_start();
  }
 }
 /**
 * 清除缓存
 */
 public function clean() {
  try {
   unlink($this->cacheid);
  }
  catch (Exception $e) {
   $this->error('清除缓存文件失败!请检查目录权限!');
  }
 }
 /**
 * 取得缓存文件路径
 */
 private function getcacheid() {
  return $this->dir.md5($this->geturl()).$this->ext;
 }
 /**
 * 检查目录是否存在或是否可创建
 */
 private function dir_isvalid($dir) {
  if (is_dir($dir)) return true;
  try {
   mkdir($dir,0777);
  }
  catch (Exception $e) {
    $this->error('所设定缓存目录不存在并且创建失败!请检查目录权限!');
    return false;   
  }
  return true;
 }
 /**
 * 取得当前页面完整url
 */
 private function geturl() {
  $url = '';
  if (isset($_SERVER['REQUEST_URI'])) {
   $url = $_SERVER['REQUEST_URI'];
  }
  else {
   $url = $_SERVER['Php_SELF'];
   $url .= empty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
  }
  return $url;
 }
 /**
 * 输出错误信息
 */
 private function error($str) {
  echo $str;
 }
}
?>

demo.php

<php
/*
 * 使用方法举例
 */
 ------------------------------------Demo1-------------------------------------------
 require_once('cache.inc.php');
 $cachedir = './Cache/'; //设定缓存目录
 $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
 if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
  $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
 //页面代码开始
 echo date('H:i:s jS F');
 //页面代码结束
 $cache->write(); //首次运行或缓存过期,生成缓存
 ------------------------------------Demo2-------------------------------------------
 require_once('cache.inc.php');
 $cachedir = './Cache/'; //设定缓存目录
 $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
 if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
  $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
 //页面代码开始
 $content = date('H:i:s jS F');
 echo $content;
 //页面代码结束
 $cache->write(1,$content); //首次运行或缓存过期,生成缓存
 ------------------------------------Demo3-------------------------------------------
 require_once('cache.inc.php');
 define('CACHEENABLE',true);
 if (CACHEENABLE) {
  $cachedir = './Cache/'; //设定缓存目录
  $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
  if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
   $cache->load(); //装载缓存,缓存有效则不执行以下页面代码 
 }
 //页面代码开始
 $content = date('H:i:s jS F');
 echo $content;
 //页面代码结束
 if (CACHEENABLE)
  $cache->write(1,$content); //首次运行或缓存过期,生成缓存
?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
PHP 批量删除 sql语句
Jun 05 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
php图像验证码生成代码
Jun 08 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 #PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 #PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 #PHP
PHP里的$_GET数组介绍
Mar 22 #PHP
PHP匿名函数(闭包函数)详解
Mar 22 #PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 #PHP
用PHP的反射实现委托模式的讲解
Mar 22 #PHP
You might like
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
浅谈Python实现2种文件复制的方法
2018/01/19 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
python中return不返回值的问题解析
2020/07/22 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
实习生矿工检讨书
2014/10/13 职场文书
外出学习心得体会范文
2016/01/18 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
一文搞懂redux在react中的初步用法
2021/06/09 Javascript