一个简洁实用的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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
用PHP创建PDF中文文档
Oct 09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php随机抽奖实例分析
Mar 04 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
浅析PHP数据导出知识点
Feb 17 PHP
php抽象类和接口知识点整理总结
Aug 02 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 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
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
php分页查询的简单实现代码
2017/03/14 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
浅析Python多线程下的变量问题
2015/04/28 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
电子商务专业实习生自我鉴定
2013/09/24 职场文书
房屋所有权证明
2015/06/19 职场文书
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js