热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自己写的一个PHP页面访问缓存类~

自己写的一个PHP页面访问缓存类~
  1. class Cache {
  2. private $dirCache; //缓存目录,用相对目录
  3. private $lifeTime; //缓存生存生存时间单位秒
  4. private $fileName; //缓存文件(包括相对路径)
  5. private $cacheFlg; //是否开启缓存
  6. private $fileExt; //缓存文件的扩展名
  7. public function __construct() {
  8. $this->dirCache = DIRTMP . '/webcache';
  9. $this->lifeTime = 0; //默认为60秒
  10. $this->cacheFlg = false; //默认为开启
  11. $this->fileExt = '.htm';
  12. $this->setFileName();
  13. }
  14. //获取缓存文件名
  15. private function setFileName() {
  16. $this->fileName = md5($_SERVER['REQUEST_URI']) . $this->fileExt;
  17. }
  18. //开始缓存
  19. public function startCache() {
  20. if ($this->cacheFlg) {
  21. if (file_exists($this->dirCache .
  22. '/' . $this->fileName) //检查文件是否存在
  23. && filesize($this->dirCache . '/' . $this->fileName) > 0 //检查文件大小即文件缓存是否保存成功
  24. && $this->checkCacheExpire() && $this->checkCacheLife()) {
  25. echo file_get_contents($this->dirCache . '/' . $this->fileName); //读取缓存内容
  26. $this->cacheFlg = false; //关闭生成缓存
  27. exit ();
  28. } else {
  29. ob_start(); //开始缓存
  30. }
  31. }
  32. }
  33. //检查被请求文件在缓存未过期时间内是否被修改
  34. private function checkCacheExpire() {
  35. if (filemtime($this->dirCache . '/' . $this->fileName) > filemtime($_SERVER['SCRIPT_FILENAME'])) {
  36. return true;
  37. } else {
  38. return false;
  39. }
  40. }
  41. //检查缓存是否过期
  42. private function checkCacheLife() {
  43. if ($this->lifeTime == 0)
  44. return true;
  45. if (time() - filemtime($this->dirCache . '/' . $this->fileName) < $this->lifeTime) {
  46. return true;
  47. } else {
  48. return false;
  49. }
  50. }
  51. //缓存页面结束
  52. public function endCache() {
  53. if ($this->cacheFlg && $this->makeDir()) {
  54. $contents = ob_get_contents(); //得到页面要缓存的内容
  55. ob_end_flush();
  56. if (!$this->createFile($contents)) {
  57. @ unlink($this->dirCache . '/' . $this->fileName);
  58. }
  59. }
  60. }
  61. //创建缓存文件
  62. private function createFile($contents) {
  63. $fp = @ fopen($this->dirCache . '/' . $this->fileName, 'w');
  64. if (@ fwrite($fp, $contents)) {
  65. @ fclose($fp);
  66. return true;
  67. } else {
  68. @ fclose($fp);
  69. return false;
  70. }
  71. }
  72. //创建缓存目录
  73. function makeDir() {
  74. if (file_exists($this->dirCache))
  75. return true;
  76. $dir = explode('/', str_replace("\\", '/', $this->dirCache));
  77. $mdir = '';
  78. foreach ($dir as $val) {
  79. $mdir .= $val . "/";
  80. if ($val == '..' || $val == '.' || emptyempty($val))
  81. continue;
  82. if (!file_exists($mdir)) {
  83. if (!@ mkdir($mdir, '0777')) {
  84. return false;
  85. }
  86. }
  87. }
  88. return true;
  89. }
  90. //清除缓存
  91. function clearCache($getFile = '') {
  92. if (emptyempty($getFile)) {
  93. $getFile = $this->dirCache;
  94. }
  95. if (file_exists($getFile) && is_dir($getFile)) {
  96. $handle = opendir($getFile);
  97. while (false != $file = readdir($handle)) {
  98. if ($file == '..' || $file == '.' || emptyempty($file))
  99. continue;
  100. if (strrchr($file, '.') == $this->fileExt) {
  101. @ unlink($getFile . $file);
  102. }
  103. if (is_dir($getFile . $file)) {
  104. if (!@ rmdir($getFile . $file)) {
  105. $this->ClearCache($getFile . $file . '/');
  106. }
  107. }
  108. }
  109. closedir($handle);
  110. $result = @ rmdir($getFile);
  111. } else {
  112. $result = true;
  113.  
  114. }
  115. if (is_file($file))
  116. @ unlink($file);
  117. return $result;
  118. }
  119. }
  120. ?> 

推荐阅读
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • HTML 表格与列表标签详解
    本文详细介绍了HTML中的表格标签和列表标签的使用方法,包括如何创建表格的不同部分(如标题、头部、主体和脚部),以及如何利用这些标签进行数据展示和布局设计。 ... [详细]
  • 本文详细探讨了PHP中使用const和define定义常量的方法及其差异。了解这些区别有助于开发者根据具体需求选择合适的方式定义常量。 ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • 深入解析Java SE、Java EE和Java Web的核心知识体系
    通过一系列图表全面解析Java SE、Java EE与Java Web的核心知识体系,帮助开发者快速掌握这些关键技术领域的要点。 ... [详细]
  • 本文详细探讨了如何根据不同的应用场景选择合适的PHP版本,包括多版本切换技巧、稳定性分析及针对WordPress等特定平台的版本建议。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 使用CorelDRAW X7轻松绘制卡通风格杯子教程
    本文将引导您通过CorelDRAW X7软件,利用贝塞尔工具和交互式填充功能,创作出一个既可爱又生动的卡通杯子。我们将详细介绍每个步骤,帮助您掌握绘制技巧。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 本文深入解析宋代著名词人宋方君的作品《风流子》,通过细腻的译文和独到的赏析,带领读者走进词人的内心世界,感受其独特的艺术魅力。 ... [详细]
  • 本文将详细介绍如何在Adobe Illustrator中实现仅移动一个对象以完成对齐,同时确保另一个对象保持原位不变的方法。通过具体的操作步骤,帮助设计师们更加高效地完成设计任务。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
author-avatar
平凡小柏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有