一个简洁实用的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 02 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
PHP curl模拟登录带验证码的网站
Nov 30 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP快速推送微信模板消息
Apr 14 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 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
3
2006/10/09 PHP
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
Python入门篇之正则表达式
2014/10/20 Python
Python基于DES算法加密解密实例
2015/06/03 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
历史学专业个人的自我评价
2013/10/13 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
审计专业自荐信范文
2014/04/21 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
如何在Python中创建二叉树
2021/03/30 Python
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL