简单实用的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调用数据库的存贮过程
Oct 09 PHP
社区(php&amp;&amp;mysql)四
Oct 09 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 PHP
PHP数组基本用法与知识点总结
Jun 02 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实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
js自定义事件代码说明
2011/01/31 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
详解vue-router基本使用
2017/04/18 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
Python处理文本换行符实例代码
2018/02/03 Python
python sorted方法和列表使用解析
2019/11/18 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
Django ModelForm操作及验证方式
2020/03/30 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
Python持续监听文件变化代码实例
2020/07/22 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
大学军训自我鉴定
2013/12/15 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
个人简历自荐信
2014/06/26 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
停电调休通知
2015/04/16 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记