PHP文件页面缓存类

在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考.

一个不错的PHP文件页面缓存类代码如下:

  1. <?php
  2. /*
  3. * 缓存类 cache
  4. * 作 者:多菜鸟
  5. * 实 例:
  6. */
  7. /*include( "cache.php" );
  8. $cache = new cache(30);
  9. $cache->cacheCheck();
  10. echo date("Y-m-d H:i:s");
  11. $cache->caching(); */
  12. class cache {
  13. //缓存目录
  14. var $cacheRoot = "./cache/";
  15. //缓存更新时间秒数,0为不缓存
  16. var $cacheLimitTime = 3;
  17. //缓存文件名
  18. var $cacheFileName = "";
  19. //缓存扩展名
  20. var $cacheFileExt = "php";
  21. /*
  22. * 构造函数
  23. * int $cacheLimitTime 缓存更新时间
  24. */
  25. function cache( $cacheLimitTime ) {
  26. if( intval( $cacheLimitTime ) )
  27. $this->cacheLimitTime = $cacheLimitTime;
  28. $this->cacheFileName = $this->getCacheFileName();
  29. ob_start();
  30. }
  31. /*
  32. * 检查缓存文件是否在设置更新时间之内
  33. * 返回:如果在更新时间之内则返回文件内容,反之则返回失败
  34. */
  35. function cacheCheck(){
  36. if( file_exists( $this->cacheFileName ) ) {
  37. $cTime = $this->getFileCreateTime( $this->cacheFileName );
  38. if( $cTime + $this->cacheLimitTime > time() ) {
  39. echo file_get_contents( $this->cacheFileName );
  40. ob_end_flush();
  41. exit;
  42. }
  43. }
  44. return false;
  45. }
  46. /*
  47. * 缓存文件或者输出静态
  48. * string $staticFileName 静态文件名(含相对路径)
  49. */
  50. function caching( $staticFileName = "" ){
  51. if( $this->cacheFileName ) {
  52. $cacheContent = ob_get_contents();
  53. //echo $cacheContent;
  54. ob_end_flush();
  55. if( $staticFileName ) {
  56. $this->saveFile( $staticFileName, $cacheContent );
  57. }
  58. if( $this->cacheLimitTime )
  59. $this->saveFile( $this->cacheFileName, $cacheContent );
  60. }
  61. }
  62. /*
  63. * 清除缓存文件
  64. * string $fileName 指定文件名(含函数)或者all(全部)
  65. * 返回:清除成功返回true,反之返回false
  66. */
  67. function clearCache( $fileName = "all" ) {
  68. if( $fileName != "all" ) {
  69. $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;
  70. if( file_exists( $fileName ) ) {
  71. return @unlink( $fileName );
  72. }else return false;
  73. }
  74. if ( is_dir( $this->cacheRoot ) ) {
  75. if ( $dir = @opendir( $this->cacheRoot ) ) {
  76. while ( $file = @readdir( $dir ) ) {
  77. $check = is_dir( $file );
  78. if ( !$check )
  79. @unlink( $this->cacheRoot . $file );
  80. }
  81. @closedir( $dir );
  82. return true;
  83. }else{
  84. return false;
  85. }
  86. }else{
  87. return false;
  88. }
  89. }
  90. /*
  91. * 根据当前动态文件生成缓存文件名
  92. */
  93. function getCacheFileName() {
  94. return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;
  95. }
  96. /*
  97. * 缓存文件建立时间
  98. * string $fileName 缓存文件名(含相对路径)
  99. * 返回:文件生成时间秒数,文件不存在返回0
  100. */
  101. function getFileCreateTime( $fileName ) {
  102. if( ! trim($fileName) ) return 0;
  103. if( file_exists( $fileName ) ) {
  104. return intval(filemtime( $fileName ));
  105. }else return 0;
  106. }
  107. /*
  108. * 保存文件
  109. * string $fileName 文件名(含相对路径)
  110. * string $text 文件内容
  111. * 返回:成功返回ture,失败返回false
  112. */
  113. function saveFile($fileName, $text) {
  114. if( ! $fileName || ! $text ) return false;
  115. if( $this->makeDir( dirname( $fileName ) ) ) {
  116. if( $fp = fopen( $fileName, "w" ) ) {
  117. if( @fwrite( $fp, $text ) ) {
  118. fclose($fp);
  119. return true;
  120. }else {
  121. fclose($fp);
  122. return false;
  123. }
  124. }
  125. }
  126. return false;
  127. }
  128. /*
  129. * 连续建目录
  130. * string $dir 目录字符串
  131. * int $mode 权限数字
  132. * 返回:顺利创建或者全部已建返回true,其它方式返回false
  133. */
  134. function makeDir( $dir, $mode = "0777" ) {
  135. if( ! $dir ) return 0;
  136. $dir = str_replace( "\", "/", $dir );
  137. $mdir = "";
  138. foreach( explode( "/", $dir ) as $val ) {
  139. $mdir .= $val."/";
  140. if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;
  141. //开源代码phpfensi.com
  142. if( ! file_exists( $mdir ) ) {
  143. if(!@mkdir( $mdir, $mode )){
  144. return false;
  145. }
  146. }
  147. }
  148. return true;
  149. }
  150. }
  151. ?>

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了,模板引擎和网上常见的一些缓存类通常有此功能.

给大家介绍一个Memcache缓存了,算是内存缓存了,代码如下:

  1. <?php
  2. $memcache = new Memcache;
  3. $memcache->connect('localhost', 11211) or die ("Could not connect");
  4. $version = $memcache->getVersion();
  5. echo "Server's version: ".$version."n";
  6. $tmp_object = new stdClass;
  7. $tmp_object->str_attr = 'test';
  8. $tmp_object->int_attr = 123;
  9. $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
  10. echo "Store data in the cache (data will expire in 10 seconds)n";
  11. $get_result = $memcache->get('key');
  12. echo "Data from the cache:n";
  13. var_dump($get_result);
  14. ?>

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.