好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP文件页面缓存类 - php类库

PHP文件页面缓存类

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

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

<?php      /*       * 缓存类    cache      * 作    者:多菜鸟      * 实    例:      */      /*include( "cache.php" );             $cache = new cache(30);      $cache->cacheCheck();             echo date("Y-m-d H:i:s");             $cache->caching();  */     class  cache {         //缓存目录          var   $cacheRoot         =  "./cache/" ;         //缓存更新时间秒数,0为不缓存          var   $cacheLimitTime    = 3;      //缓存文件名          var   $cacheFileName     =  "" ;         //缓存扩展名          var   $cacheFileExt      =  "php" ;                /*         * 构造函数         * int $cacheLimitTime 缓存更新时间         */         function  cache(  $cacheLimitTime  ) {           if (  intval (  $cacheLimitTime  ) )              $this ->cacheLimitTime =  $cacheLimitTime ;           $this ->cacheFileName =  $this ->getCacheFileName();          ob_start();        }                 /*         * 检查缓存文件是否在设置更新时间之内         * 返回:如果在更新时间之内则返回文件内容,反之则返回失败         */         function  cacheCheck(){           if (  file_exists (  $this ->cacheFileName ) ) {             $cTime  =  $this ->getFileCreateTime(  $this ->cacheFileName );             if (  $cTime  +  $this ->cacheLimitTime > time() ) {               echo   file_get_contents (  $this ->cacheFileName );              ob_end_flush();               exit ;            }          }           return  false;        }                /*         * 缓存文件或者输出静态         * string $staticFileName 静态文件名(含相对路径)         */         function  caching(  $staticFileName  =  ""  ){           if (  $this ->cacheFileName ) {             $cacheContent  = ob_get_contents();             //echo $cacheContent;             ob_end_flush();                    if (  $staticFileName  ) {                 $this ->saveFile(  $staticFileName ,  $cacheContent  );            }                    if (  $this ->cacheLimitTime )               $this ->saveFile(  $this ->cacheFileName,  $cacheContent  );          }        }                 /*         * 清除缓存文件         * string $fileName 指定文件名(含函数)或者all(全部)         * 返回:清除成功返回true,反之返回false         */         function  clearCache(  $fileName  =  "all"  ) {           if (  $fileName  !=  "all"  ) {             $fileName  =  $this ->cacheRoot .  strtoupper (md5( $fileName )). "." . $this ->cacheFileExt;             if (  file_exists (  $fileName  ) ) {               return  @unlink(  $fileName  );            } else   return  false;          }           if  (  is_dir (  $this ->cacheRoot ) ) {             if  (  $dir  = @opendir(  $this ->cacheRoot ) ) {               while  (  $file  = @readdir(  $dir  ) ) {                 $check  =  is_dir (  $file  );                 if  ( ! $check  )                @unlink(  $this ->cacheRoot .  $file  );              }              @ closedir (  $dir  );               return  true;            } else {               return  false;            }          } else {             return  false;          }        }                /*         * 根据当前动态文件生成缓存文件名         */         function  getCacheFileName() {           return    $this ->cacheRoot .  strtoupper (md5( $_SERVER [ "REQUEST_URI" ])). "." . $this ->cacheFileExt;        }                /*         * 缓存文件建立时间         * string $fileName   缓存文件名(含相对路径)         * 返回:文件生成时间秒数,文件不存在返回0         */         function  getFileCreateTime(  $fileName  ) {           if ( ! trim( $fileName ) )  return  0;                  if (  file_exists (  $fileName  ) ) {              return   intval ( filemtime (  $fileName  ));          } else   return  0;        }                 /*         * 保存文件         * string $fileName  文件名(含相对路径)         * string $text      文件内容         * 返回:成功返回ture,失败返回false         */         function  saveFile( $fileName ,  $text ) {           if ( !  $fileName  || !  $text  )  return  false;                  if (  $this ->makeDir( dirname(  $fileName  ) ) ) {             if (  $fp  =  fopen (  $fileName ,  "w"  ) ) {               if ( @fwrite(  $fp ,  $text  ) ) {                fclose( $fp );                 return  true;              } else  {                fclose( $fp );                 return  false;              }            }          }           return  false;        }                /*         * 连续建目录         * string $dir 目录字符串         * int $mode   权限数字         * 返回:顺利创建或者全部已建返回true,其它方式返回false         */         function  makeDir(  $dir ,  $mode  =  "0777"  ) {           if ( !  $dir  )  return  0;           $dir  =  str_replace (  "\", " /",  $dir  );                   $mdir  =  "" ;          foreach (  explode (  "/" ,  $dir  )  as   $val  ) {            $mdir  .=  $val . "/" ;            if (  $val  ==  ".."  ||  $val  ==  "."  || trim(  $val  ) ==  ""  )  continue ;              //开源代码phpfensi测试数据          if ( !  file_exists (  $mdir  ) ) {               if (!@ mkdir (  $mdir ,  $mode  )){                return  false;              }            }          }           return  true;        }      }      ?>  

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

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

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

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

查看更多关于PHP文件页面缓存类 - php类库的详细内容...

  阅读:53次