简单实用的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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
MySQL相关说明
Jan 15 PHP
JS 网站性能优化笔记
May 24 PHP
PHP闭包(Closure)使用详解
May 02 PHP
百度站点地图(百度sitemap)生成方法分享
Jan 09 PHP
php发送post请求函数分享
Mar 06 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
PHP下载生成的csv文件及问题总结
Aug 06 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
电脑租赁公司创业计划书
2014/01/08 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
慰问信模板
2015/02/14 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
博士论文答辩开场白
2015/06/01 职场文书
儿子满月酒致辞
2015/07/29 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python