一个简洁实用的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去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
php使用百度ping服务代码实例
Jun 19 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 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
Oracle 常见问题解答
2006/10/09 PHP
五个PHP程序员工具
2008/05/26 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
php常用数学函数汇总
2014/11/21 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
小学生检讨书大全
2014/02/06 职场文书
运动会入场词200字
2014/02/15 职场文书
师德师风个人反思
2014/04/28 职场文书
教师考核材料
2014/05/21 职场文书
广告宣传策划方案
2014/05/21 职场文书
读群众路线的心得体会
2014/09/03 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
Nginx利用Logrotate实现日志分割
2022/05/20 Servers