一个简洁实用的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速度全攻略
Oct 09 PHP
PHP函数常用用法小结
Feb 08 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
php微信公众号开发之答题连闯三关
Oct 20 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
php数组去重的函数代码
2013/02/03 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
php面向对象重点知识分享
2019/09/27 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
jQuery textarea的长度进行验证
2009/05/06 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
vue移动端实现下拉刷新
2018/04/22 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python求crc32值的方法
2014/10/05 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
浅谈Python协程
2020/06/17 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
eBay美国官网:eBay.com
2020/10/24 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
数控专业个人求职信范例
2013/11/29 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
冬季安全检查方案
2014/05/23 职场文书
四风对照检查材料范文
2014/09/27 职场文书
师德承诺书
2015/01/20 职场文书