简单实用的网站PHP缓存类实例

这篇文章主要介绍了简单实用的网站PHP缓存类,对于大家学习及理解缓存的机制与运行原理大有好处,需要的朋友可以参考下。

缓存技术在实际使用当中应用非常广泛,可以有效减轻对服务器数据库的访问压力,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。本文以一个简单实用的缓存类为例,帮助大家参考下缓存的机制与写法。

缓存文件cache.php代码如下:

  1. <?php
  2. /*
  3. 用户需要事先定义的常量:
  4. _CachePath_ 模板缓存路径
  5. _CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制
  6. _ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存
  7. */
  8. class cache
  9. {
  10. var $cachefile;
  11. var $cachefilevar;
  12. function cache()
  13. {
  14. //生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile
  15. //动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同
  16. $s=array(".","/");$r=array("_","");
  17. $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];
  18. $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);
  19. }
  20. //删除当前页/模块的缓存
  21. function delete()
  22. {
  23. //删除当前页的缓存
  24. $d = dir(_CachePath_);
  25. $strlen=strlen($this->cachefilevar);
  26. //返回当前页的所有太原264医院Cache文件组
  27. while (false !== ($entry = $d->read()))
  28. {
  29. if (substr($entry,0,$strlen)==$this->cachefilevar)
  30. {
  31. if (!unlink(_CachePath_."/".$entry)) {echo "Cache目录无法写入";exit;}
  32. }
  33. }
  34. }
  35. //判断是否已Cache过,以及是否需要Cache
  36. function check()
  37. {
  38. //如果设置了缓存更新间隔时间 _ReCacheTime_
  39. if (_ReCacheTime_+0>0)
  40. {
  41. //返回当前页Cache的最后更新时间
  42. $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];
  43. //如果更新时间超出更新间隔时间则删除Cache文件
  44. if (time()-$var>_ReCacheTime_)
  45. {
  46. $this->delete();$ischage=true;
  47. }
  48. }
  49. //返回当前页的Cache
  50. $file=_CachePath_."/".$this->cachefile;
  51. //判断当前页Cache是否存在 且 Cache功能是否开启
  52. return (file_exists($file) and _CacheEnable_ and !$ischange);
  53. }
  54. //读取Cache
  55. function read()
  56. {
  57. //返回当前页的Cache
  58. $file=_CachePath_."/".$this->cachefile;
  59. //读取Cache文件的内容
  60. if (_CacheEnable_) return readfile($file);
  61. else return false;
  62. }
  63. //生成Cache
  64. function write($output)
  65. {
  66. //返回当前页的Cache
  67. $file=_CachePath_."/".$this->cachefile;
  68. //如果Cache功能开启
  69. if (_CacheEnable_)
  70. {
  71. //把输出的内容写入Cache文件
  72. $fp=@fopen($file,'w');
  73. if (!@fputs($fp,$output)) {echo "模板Cache写入失败";exit;}
  74. @fclose($fp);
  75. //如果设置了缓存更新间隔时间 _ReCacheTime_
  76. if (_ReCacheTime_+0>0)
  77. {
  78. //更新当前页Cache的最后更新时间
  79. $file=_CachePath_."/".$this->cachefilevar;
  80. $fp=@fopen($file,'w');
  81. if (!@fwrite($fp,time())) {echo "Cache目录无法写入";exit;}
  82. @fclose($fp);
  83. }
  84. }
  85. }
  86. }
  87. ?>

缓存类的使用:

  1. <?php
  2. define("_CachePath_","./cache/");
  3. define("_CacheEnable_","1");
  4. define("_ReCacheTime_","43200");
  5. include('cache.php');
  6. $cache=new cache();
  7. if ($cache->check())
  8. {
  9. $template=$cache->read();
  10. }
  11. else
  12. {
  13. ob_start();
  14. ob_implicit_flush(0);
  15. ?>

此处为页面内容。。。。

  1. <?php
  2. $template = ob_get_contents();
  3. $cache->write($template);
  4. }
  5. ?>