简单实用的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 删除记录同时删除图片文件的实现代码
May 12 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
初识laravel5
Mar 02 PHP
php实现的通用图片处理类
Mar 24 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
PHP xpath()函数讲解
Feb 11 PHP
php写入mysql中文乱码的实例解决方法
Sep 17 PHP
php解决约瑟夫环算法实例分析
Sep 30 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中邮箱地址正则表达式实现与详解
2012/04/24 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
深入理解vue $refs的基本用法
2017/07/13 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
python简单判断序列是否为空的方法
2015/06/30 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
某公司面试题
2012/03/05 面试题
在求职信中如何凸显个人优势
2013/10/30 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
关于环保的广播稿
2015/12/17 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
详解SQL报错盲注
2022/07/23 SQL Server
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers