一个简洁实用的PHP缓存类完整实例


Posted in PHP onJuly 26, 2014

本文完整描述了一个简洁实用的PHP缓存类,可用来检查缓存文件是否在设置更新时间之内、清除缓存文件、根据当前动态文件生成缓存文件名、连续创建目录、缓存文件输出静态等功能。对于采用PHP开发CMS系统来说,离不开对缓存的处理,合理利用好缓存可有效的提高程序执行效率。

php缓存类文件完整代码如下:

<?php
/*
* 缓存类 cache
*/
class cache {
//缓存目录
var $cacheRoot = "./cache/";
//缓存更新时间秒数,0为不缓存
var $cacheLimitTime = 0;
//缓存文件名
var $cacheFileName = "";
//缓存扩展名
var $cacheFileExt = "php";
/*
  * 构造函数
  * int $cacheLimitTime 缓存更新时间
  */
function cache( $cacheLimitTime ) {
  if( intval( $cacheLimitTime ) )
  $this->cacheLimitTime = $cacheLimitTime;
  $this->cacheFileName = $this->getCacheFileName();
  ob_start();
} 
/*
  * 检查缓存文件是否在设置更新时间之内
  * 返回:如果在更新时间之内则返回文件内容,反之则返回失败
  */
function cacheCheck(){
  if( file_exists( $this->cacheFileName ) ) {
  $cTime = $this->getFileCreateTime( $this->cacheFileName );
  if( $cTime + $this->cacheLimitTime > time() ) {
  echo file_get_contents( $this->cacheFileName );
  ob_end_flush();
  exit;
  }
  }
  return false;
}
/*
  * 缓存文件或者输出静态
  * string $staticFileName 静态文件名(含相对路径)
  */
function caching( $staticFileName = "" ){
  if( $this->cacheFileName ) {
  $cacheContent = ob_get_contents();
  ob_end_flush();
  if( $staticFileName ) {
  $this->saveFile( $staticFileName, $cacheContent );
  }
  if( $this->cacheLimitTime )
  $this->saveFile( $this->cacheFileName, $cacheContent );
  }
} 
/*
  * 清除缓存文件
  * string $fileName 指定文件名(含函数)或者all(全部)
  * 返回:清除成功返回true,反之返回false
  */
function clearCache( $fileName = "all" ) {
  if( $fileName != "all" ) {
  $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;
  if( file_exists( $fileName ) ) {
  return @unlink( $fileName );
  }else return false;
  }
  if ( is_dir( $this->cacheRoot ) ) {
  if ( $dir = @opendir( $this->cacheRoot ) ) {
  while ( $file = @readdir( $dir ) ) {
  $check = is_dir( $file );
  if ( !$check )
  @unlink( $this->cacheRoot . $file );
  }
  @closedir( $dir );
  return true;
  }else{
  return false;
  }
  }else{
  return false;
  }
}
/*根据当前动态文件生成缓存文件名*/
function getCacheFileName() {
  return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;
}
/*
  * 缓存文件建立时间
  * string $fileName 缓存文件名(含相对路径)
  * 返回:文件生成时间秒数,文件不存在返回0
  */
function getFileCreateTime( $fileName ) {
  if( ! trim($fileName) ) return 0;
  if( file_exists( $fileName ) ) {
  return intval(filemtime( $fileName ));
  }else return 0;
} 
/*
  * 保存文件
  * string $fileName 文件名(含相对路径)
  * string $text 文件内容
  * 返回:成功返回ture,失败返回false
  */
function saveFile($fileName, $text) {
  if( ! $fileName || ! $text ) return false;
  if( $this->makeDir( dirname( $fileName ) ) ) {
  if( $fp = fopen( $fileName, "w" ) ) {
  if( @fwrite( $fp, $text ) ) {
  fclose($fp);
  return true;
  }else {
  fclose($fp);
  return false;
  }
  }
  }
  return false;
}
/*
  * 连续建目录
  * string $dir 目录字符串
  * int $mode 权限数字
  * 返回:顺利创建或者全部已建返回true,其它方式返回false
  */
function makeDir( $dir, $mode = "0777" ) {
  if( ! $dir ) return 0;
  $dir = str_replace( "\\", "/", $dir );
  $mdir = "";
  foreach( explode( "/", $dir ) as $val ) {
  $mdir .= $val."/";
  if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;
  if( ! file_exists( $mdir ) ) {
  if(!@mkdir( $mdir, $mode )){
  return false;
  }
  }
  }
  return true;
}
}
?>

使用该缓存类的时候可将以上代码保存为cache.php,具体用法如下所示:

include( "cache.php" );
$cache = new cache(30);
$cache->cacheCheck();
echo date("Y-m-d H:i:s");
$cache->caching();
PHP 相关文章推荐
php中对xml读取的相关函数的介绍一
Jun 05 PHP
php 函数使用方法与函数定义方法
May 09 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
php搜索文件程序分享
Oct 30 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP单态模式简单用法示例
Nov 16 PHP
php获取客户端IP及URL的方法示例
Feb 03 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
PHP常量及变量区别原理详解
Aug 14 PHP
PHP实现多图片上传类实例
Jul 26 #PHP
PHP判断文章里是否有图片的简单方法
Jul 26 #PHP
php中创建和调用webservice接口示例
Jul 25 #PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 #PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 #PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 #PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 #PHP
You might like
模仿OSO的论坛(四)
2006/10/09 PHP
php仿ZOL分页类代码
2008/10/02 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
vue实现通讯录功能
2018/07/14 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
小学生自我评价范例
2013/09/24 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
建筑工地宣传标语
2014/06/18 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python
python图像处理 PIL Image操作实例
2022/04/09 Python
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
Django中celery的使用项目实例
2022/07/07 Python