一个简洁实用的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 引用是个坏习惯
Mar 12 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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/05/26 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
Python 数据结构之队列的实现
2017/01/22 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python内建模块struct实例详解
2018/02/02 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python实现堆排序的实例讲解
2020/02/21 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
销售演讲稿范文
2014/01/08 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
单位在职证明书
2014/09/11 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python