[PHP实例] 一个PHP缓存类

  1. cache.inc.php:
  2. <?php
  3. http://www.nvzi91.cn/rlyfkb/032429978.html
  4. class Cache {
  5. /**
  6. * $dir : 缓存文件存放目录
  7. * $lifetime : 缓存文件有效期,单位为秒
  8. * $cacheid : 缓存文件路径,包含文件名
  9. * $ext : 缓存文件扩展名(可以不用),这里使用是为了查看文件方便
  10. */
  11. private $dir;
  12. private $lifetime;
  13. private $cacheid;
  14. private $ext;
  15. /**
  16. * 析构函数,检查缓存目录是否有效,默认赋值
  17. */http://www.nvzi91.cn/gongjingmilan/29979.html
  18. function __construct($dir='',$lifetime=1800) {
  19. if ($this->dir_isvalid($dir)) {
  20. $this->dir = $dir;
  21. $this->lifetime = $lifetime;
  22. $this->ext = '.Php';
  23. $this->cacheid = $this->getcacheid();
  24. }
  25. }
  26. /**
  27. * 检查缓存是否有效
  28. */
  29. private function isvalid() {
  30. if (!file_exists($this->cacheid)) return false;
  31. if (!(@$mtime = filemtime($this->cacheid))) return false;
  32. if (mktime() - $mtime > $this->lifetime) return false;
  33. return true;
  34. }
  35. /**
  36. * 写入缓存
  37. * $mode == 0 , 以浏览器缓存的方式取得页面内容
  38. * $mode == 1 , 以直接赋值(通过$content参数接收)的方式取得页面内容
  39. * $mode == 2 , 以本地读取(fopen ile_get_contents)的方式取得页面内容(似乎这种方式没什么必要)
  40. */
  41. public function write($mode=0,$content='') {
  42. switch ($mode) {
  43. case 0:
  44. $content = ob_get_contents();
  45. break;
  46. default:
  47. break;
  48. }
  49. ob_end_flush();
  50. try {
  51. file_put_contents($this->cacheid,$content);
  52. }http://www.nvzi91.cn/gongjingxirou/29980.html
  53. catch (Exception $e) {
  54. $this->error('写入缓存失败!请检查目录权限!');
  55. }
  56. }
  57. /**
  58. * 加载缓存
  59. * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存
  60. * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容
  61. */
  62. public function load() {
  63. if ($this->isvalid()) {
  64. echo "<span style='display:none;'>This is Cache.</span> ";
  65. //以下两种方式,哪种方式好?????
  66. require_once($this->cacheid);
  67. //echo file_get_contents($this->cacheid);
  68. exit();
  69. }
  70. else {http://www.nvzi91.cn/gongjingyan/29981.html
  71. ob_start();
  72. }
  73. }
  74. /**
  75. * 清除缓存
  76. */
  77. public function clean() {
  78. try {
  79. unlink($this->cacheid);
  80. }
  81. catch (Exception $e) {
  82. $this->error('清除缓存文件失败!请检查目录权限!');
  83. }
  84. }
  85. /**
  86. * 取得缓存文件路径
  87. */
  88. private function getcacheid() {
  89. return $this->dir.md5($this->geturl()).$this->ext;
  90. }
  91. /**http://www.nvzi91.cn/gongwaiyun/29982.html
  92. * 检查目录是否存在或是否可创建
  93. */
  94. private function dir_isvalid($dir) {
  95. if (is_dir($dir)) return true;
  96. try {
  97. mkdir($dir,0777);
  98. }
  99. catch (Exception $e) {
  100. $this->error('所设定缓存目录不存在并且创建失败!请检查目录权限!');
  101. return false;
  102. }
  103. return true;
  104. }
  105. /**
  106. * 取得当前页面完整url
  107. */
  108. private function geturl() {
  109. $url = '';
  110. if (isset($_SERVER['REQUEST_URI'])) {
  111. $url = $_SERVER['REQUEST_URI'];
  112. }
  113. else {
  114. $url = $_SERVER['Php_SELF'];
  115. $url .= empty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
  116. }
  117. return $url;
  118. }www.nvzi91.cn
  119. /**
  120. * 输出错误信息
  121. */
  122. private function error($str) {
  123. echo '<div style="color:red;">'.$str.'</div>';
  124. }
  125. }
  126. ?>
复制代码

  1. demo.php:
  2. <?php
  3. /*
  4. * 可自由转载使用,请保留版权信息,谢谢使用!
  5. * Class Name : Cache (For Php5)
  6. * Version : 1.0
  7. * Description : 动态缓存类,用于控制页面自动生成缓存、调用缓存、更新缓存、删除缓存.
  8. * Author : jiangjun8528@163.com,Junin
  9. * Author Page : http://blog.csdn.Net/sdts/
  10. * Last Modify : 2007-8-22
  11. * Remark :
  12. 1.此版本为Php5版本,本人暂没有写Php4的版本,如需要请自行参考修改(比较容易啦,不要那么懒嘛,呵呵!).
  13. 2.此版本为utf-8编码,如果网站采用其它编码请自行转换,Windows系统用记事本打开另存为,选择相应编码即可(一般ANSI),Linux下请使用相应编辑软件或iconv命令行.
  14. 3.拷贝粘贴的就不用管上面第2条了.
  15. * 关于缓存的一点感想:
  16. * 动态缓存和静态缓存的根本差别在于其是自动的,用户访问页面过程就是生成缓存、浏览缓存、更新缓存的过程,无需人工操作干预.
  17. * 静态缓存指的就是生成静态页面,相关操作一般是在网站后台完成,需人工操作(也就是手动生成).
  18. */
  19. /*
  20. * 使用方法举例
  21. ------------------------------------Demo1-------------------------------------------
  22. require_once('cache.inc.php');
  23. $cachedir = './Cache/'; //设定缓存目录
  24. $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
  25. if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
  26. $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
  27. //页面代码开始
  28. echo date('H:i:s jS F');
  29. //页面代码结束
  30. $cache->write(); //首次运行或缓存过期,生成缓存
  31. ------------------------------------Demo2-------------------------------------------
  32. require_once('cache.inc.php');
  33. $cachedir = './Cache/'; //设定缓存目录
  34. $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
  35. if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
  36. $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
  37. //页面代码开始
  38. $content = date('H:i:s jS F');
  39. echo $content;
  40. //页面代码结束
  41. $cache->write(1,$content); //首次运行或缓存过期,生成缓存
  42. ------------------------------------Demo3-------------------------------------------
  43. require_once('cache.inc.php');
  44. define('CACHEENABLE',true);
  45. if (CACHEENABLE) {
  46. $cachedir = './Cache/'; //设定缓存目录
  47. $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
  48. if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
  49. $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
  50. }
  51. //页面代码开始
  52. $content = date('H:i:s jS F');
  53. echo $content;
  54. //页面代码结束
  55. if (CACHEENABLE)
  56. $cache->write(1,$content); //首次运行或缓存过期,生成缓存
  57. */
  58. ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值