一个简洁实用的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调用三种数据库的方法(2)
Oct 09 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
深入PHP autoload机制的详解
Jun 09 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
Laravel find in set排序实例
Oct 09 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 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
中国收音机工业发展史
2021/03/02 无线电
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
关于Javascript中document.cookie的使用
2017/03/08 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python3实现定时任务的四种方式
2019/06/03 Python
python3 深浅copy对比详解
2019/08/12 Python
性能服装:HYLETE
2018/08/14 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
小学生家长评语大全
2014/02/10 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
医院党员公开承诺书
2014/08/30 职场文书
电工实训报告总结
2014/11/05 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
辞职信怎么写?
2019/05/21 职场文书
2019思想汇报范文
2019/05/21 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
Django项目如何正确配置日志(logging)
2021/04/29 Python
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers