<?php
class Cache {/** 缓存目录 **/var $CacheDir        = './cache';/** 缓存的文件 **/var $CacheFile        = '';/** 文件缓存时间(分钟) **/var $CacheTime        = 0;/** 文件是否已缓存 **/var $CacheFound        = False;/** 错误及调试信息 **/var $DebugMsg        = NULL;function Cache($CacheTime = 0) {$this->CacheTime    = $CacheTime;}private function Run() {/** 缓存时间大于0,检测缓存文件的修改时间,在缓存时间内为缓存文件名,超过缓存时间为False,小于等于0,返回false,并清理已缓存的文件 **/Return $this->CacheTime ? $this->CheckCacheFile() : $this->CleanCacheFile();}function GetCache($VistUrl,$CacheFileType = 'html'){$this->SetCacheFile($VistUrl,$CacheFileType);$fileName=$this->CheckCacheFile();if($fileName){$fp = fopen($fileName,"r");$content_= fread($fp, filesize($fileName));fclose($fp);return $content_;}else{return false;}}private function SetCacheFile($VistUrl,$CacheFileType = 'html') {if(empty($VistUrl)) {/** 默认为index.html **/$this->CacheFile = 'index';}else {/** 传递参数为$_POST时 **/$this->CacheFile = is_array($VistUrl) ? implode('.',$VistUrl) : $VistUrl;}$this->CacheFile = $this->CacheDir.'/'.md5($this->CacheFile);$this->CacheFile.= '.'.$CacheFileType;}function SetCacheTime($t = 60) {$this->CacheTime = $t;}private function CheckCacheFile() {if(!$this->CacheTime || !file_exists($this->CacheFile)) {Return False;}/** 比较文件的建立/修改日期和当前日期的时间差 **/$GetTime=(Time()-Filemtime($this->CacheFile))/(60*1);/** Filemtime函数有缓存,注意清理 **/Clearstatcache();$this->Debug('Time Limit '.($GetTime*60).'/'.($this->CacheTime*60).'');$this->CacheFound = $GetTime <= $this->CacheTime ? $this->CacheFile : False;Return $this->CacheFound;}function SaveToCacheFile($VistUrl,$Content,$CacheFileType = 'html') {$this->SetCacheFile($VistUrl,$CacheFileType);if(!$this->CacheTime) {Return False;}/** 检测缓存目录是否存在 **/if(true === $this->CheckCacheDir()) {$CacheFile = $this->CacheFile;$CacheFile = str_replace('//','/',$CacheFile);$fp = @fopen($CacheFile,"wb");if(!$fp) {$this->Debug('Open File '.$CacheFile.' Fail');}else {if(@!fwrite($fp,$Content)){$this->Debug('Write '.$CacheFile.' Fail');}else {$this->Debug('Cached File');};@fclose($fp);}}else {/** 缓存目录不存在,或不能建立目录 **/$this->Debug('Cache Folder '.$this->CacheDir.' Not Found');}}private function CheckCacheDir() {if(file_exists($this->CacheDir)) { Return true; }/** 保存当前工作目录 **/$Location = getcwd();/** 把路径划分成单个目录 **/$Dir = split("/", $this->CacheDir);/** 循环建立目录 **/$CatchErr = True;for ($i=0; $i<count($Dir); $i++){if (!file_exists($Dir[$i])){/** 建立目录失败会返回False 返回建立最后一个目录的返回值 **/$CatchErr = @mkdir($Dir[$i],0777);}@chdir($Dir[$i]);}/** 建立完成后要切换到原目录 **/chdir($Location);if(!$CatchErr) {$this->Debug('Create Folder '.$this->CacheDir.' Fail');}Return $CatchErr;}private function CleanCacheFile() {if(file_exists($this->CacheFile)) {@chmod($this->CacheFile,777);@unlink($this->CacheFile);}/** 置没有缓存文件 **/$this->CacheFound = False;Return $this->CacheFound;}function Debug($msg='') {if(DEBUG) {$this->DebugMsg[] = '[Cache]'.$msg;}}function GetError() {Return empty($this->DebugMsg) ? '' : "<br>n".implode("<br>n",$this->DebugMsg);}
}/* end of class */
?>

转载于:https://www.cnblogs.com/phper12580/p/10509361.html

一个很棒的PHP缓存类,收藏下相关推荐

  1. easyexcel一个很棒的Excel解析工具

    easyexcel一个很棒的Excel解析工具 前言 Excel格式 核心原理对比 理解与使用 总结 前言 最近手头上有一个项目,其中有一个需求就是要Excel表格导入导出,之前有过类似的经验,不过当 ...

  2. 研究生跟了一个很棒的导师,是什么神仙体验?

    来源 | 百度学术 个人感觉读研是很重要的,如果问小编从小到大做的最英明的决定是什么,那一定是考上了研究生,而且重要的是要考一个大城市的研究生. 大家要吐槽是有趣的,但是不希望大家的吐槽对于读研这个事 ...

  3. Giphy – 分享一个很棒的 GIF 动画图片搜索引擎

    GIF 动画图片是一种非常有趣的图片格式,比静态图片更能够表达出含义,如果能制作得有创意,那就非常的有趣.今天向大家推荐一个很棒的 GIF 动画图片搜索引擎--Giphy. 您可能感兴趣的相关文章 轻 ...

  4. 一个很棒的手机app:金手指音乐曲谱​

    http://apk.hiapk.com/appinfo/com.jh.APPfbf19bf66a8a4ed0a11f952a11fa6e07.news 一个很棒的手机app:金手指音乐曲谱 转载于: ...

  5. 如何为您的插件创建一个很棒的WordPress.org页面

    You've just developed an awesome plugin for WordPress and you want to share it with as many people a ...

  6. 有一个很棒的想法,如何向老板证明你是对的

    作者:姚说 全文共 2281 字 1 图,阅读需要 5 分钟 ---- / BEGIN / ---- 很多人经常遇到这样的情况:自己想出了一个很好的想法,但是被老板或者领导给否定掉了,应该怎么办? 其 ...

  7. 强烈推荐三个很棒的开发者工具,收藏以防不时之需

    小编推荐:Fundebug提供JS错误监控.微信小程序错误监控.微信小游戏错误监控,Node.j错误监控和Java错误监控.真的是一个很好用的错误监控费服务,众多大佬公司都在使用. Carbon.no ...

  8. 一个很棒的Flutter学习资源列表

    目录 文章 一开始 HOWTO文档 网站/博客 高级 视频 组件 演示 UI 材料设计 图片 地图 图表 导航 验证 文字和富文本 分析.流量统计 自动构建 风格样式 媒体 音频 视频 语音 存储 获 ...

  9. android屏幕适配:一个很棒的屏幕适配文章

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ...

最新文章

  1. 精读《手写 SQL 编译器 - 错误提示》
  2. PHP问题 —— PHP Parse error: syntax error, unexpected
  3. CF1067E Random Forest Rank(树形dp,概率与期望,线性代数)
  4. c语言实现配置文件的读写
  5. 【POJ - 3041】Asteroids (二分图,最小点覆盖)
  6. Rainbow Tables
  7. 利用ARCGIS制作MIKE21边界文件
  8. 远程线程注入技术 屏蔽ctrl+alt+del
  9. 怎么提供专利技术交底书
  10. Java模拟ssh交互_java模拟ssh执行shell命令
  11. ray 渲染基本使用流程
  12. skywang的博客目录(持续更新中...)
  13. 汽车控制器自研AUTOSAR开发工具链需要哪些?
  14. macbook键盘失灵
  15. 计算机网络——cookie、session、token原理
  16. JavaScript DOM操作案例点击按钮修改ul背景颜色
  17. 调用浏览器下载图片 java实现
  18. RocketMQ(九)RocketMQ顺序消息
  19. Unity 报错处理
  20. 安卓测试和iOS测试的区别-总结篇

热门文章

  1. 计算机网络方面国际三大顶级会议 - MOBICOM - SIGCOMM - INFOCOM
  2. 英特尔芯片专利官司败诉,判罚140亿,半个季度白干了...
  3. AI也会查水表啦!德国小哥开发水表读取器,可OTA升级,成本不到80元
  4. 高通5G开始挤牙膏?骁龙865+发布,性能小幅提升,一加听了要笑,魅族看了会流泪...
  5. MindSpore布道师队伍招募开始,助力小白成为大牛!
  6. 手机拍视频,实时换背景,继马卡龙玩图后,Versa又出了一款更厉害的App
  7. Android程序员的技术要求和学习路线
  8. 智能汽车带火汽车存储产品 三星/东芝/SK海力士/美光纷纷“下手”
  9. Java反射机制实例解析
  10. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除...