好得很程序员自学网

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

几个简单的php数据文件缓存类 - php类库

几个简单的php数据文件缓存类

数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存有需要的朋友可参考参考.

1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了.

2.对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了.

3.缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库.

文件缓存类,代码如下:

<?php  class  DataCache  {      /**     * 数组转换     *     * @param array $array     * @param string $arrayName     * @param array $level     *     * @return string     */     private   function  arrayEval( $array ,  $arrayName  =  '' ,  $level  = 0)   {     $space  =  str_repeat ( "t" ,  $level );       if  ( empty empty ( $arrayName ))    {      $evaluate  =  "arrayn$space(n" ;    }     else     {      $evaluate  =  "${$arrayName} = arrayn$space(n" ;    }       $space2  =  str_repeat ( "t" ,  $level  + 1);     $comma  =  $space2 ;     if  (! empty empty ( $array ))    {      foreach  ( $array   as   $key  =>  $val )     {       $key  =  is_string ( $key ) ?  '' ' . addcslashes($key, ' '\') . ' ''  :  $key ;       $val  = ! is_array ( $val ) && (!preg_match( '/^-?[1-9]d*$/' ,  $val ) ||  strlen ( $val ) > 12) ?  '' ' . addcslashes($val, ' '\') . ' ''  :  $val ;       if  ( is_array ( $val ))      {        $evaluate  .=  "$comma$key => "  . arrayEval( $val ,  '' ,  $level  + 1);      }       else       {        $evaluate  .=  "$comma$key => $val" ;      }       $comma  =  ",n$space2" ;     }    }     $evaluate  .=  "n$space)" ;       // 最后才需要一个[;]      if  ( $level  == 0)    {      $evaluate  .=  ";" ;    }     return   $evaluate ;   }      /**     * 写入缓存     *     * @param string $path     * @param string $arrayName     * @param array  $data     *     * @return boolean     */     public   static   function  writeCache( $path ,  $arrayName ,  $data )   {     if  ( $handle  =  fopen ( $path ,  'w+' ))    {      $data  = self::arrayEval( $data ,  $arrayName );        $dataConvert  =  "<?phpn"  .  $data ;        flock ( $handle , LOCK_EX);      $rs  =  fputs ( $handle ,  $dataConvert );      flock ( $handle , LOCK_UN);     fclose( $handle );      if  ( $rs  !== false)     {       return  true;     }    }     return  false;   }    }  ?> 

调用方法,代码如下:

/**   * 生成文件缓存   *   * @param string $filePath 缓存文件的保存路径   * @param string $arrayName 存放在缓存文件中的数组名称   * @param array $data 数据   *   * @return boolean   */   DataCache::writeCache( $filePath ,  $arrayName ,  $data ); 

memcache来缓存数据, 提供这个文件缓存的类m希望大家可以看看,代码如下:

<?php  /**    * 文件缓存类    * 提供文件缓存    * @author guoyubin(263421949@qq测试数据)    */   class  Cache_FileCache{             /**        * 设置缓存        * @param $key 缓存的关键字key        * @param $data 缓存的内容        * @param $cacheLife 缓存时间(单位为秒)如果为0 则表示无限时间        * @return Bool        */        public   static   function  setCache( $key , $data , $cacheLife )      {               if ( file_exists (__SITE_FILE_CACHE))              {                  @ $file                 =  __SITE_FILE_CACHE .  "/"  .  $key  . ".php" ;                   $cache                   =   array ();                   $time                 =  __SYS_TIME;                   $cache [ 'content' ]    =   $data ;                   $cache [ 'expire' ]    =   $cacheLife  === 0 ? 0 :  $time + $cacheLife ;                   $cache [ 'mtime' ]        =   $time ;                   $cache                 =  serialize( $cache );                   $setReslut             =  @ file_put_contents ( $file , $cache )  or  self::error(__line__, "文件写入出错" );                   $chmodReslut         =  @ chmod ( $file ,0777)  or  self::error(__line__, "设定文件权限失败" );                   if ( $setReslut  &&  $chmodReslut )                  {                       return  true;                  }                   else                   {                       return  false;                  }                                }                }         /**        * 得到缓存数据        * @param $key 缓存的关键字key        * @return array        */        public   static   function  getCache( $key )      {              @ $file                 =      __SITE_FILE_CACHE .  "/"  .  $key  . ".php" ;               if ( file_exists ( $file ))              {                        $data         =    @ file_get_contents ( $file );                        $data         =   unserialize( $data );                        if ( $data [ 'expire' ]==0 ||  $data [ 'expire' ] > __SYS_TIME)                       {                            return   $data [ 'content' ];                       }                        else                         {                           unlink( $file );                            return   array ();                       }              }              }             /**        * 删除缓存文件        * @param $key 缓存$key        * @return Bool        */        public   static   function  delCache( $key )      {                   if  (@unlink(__SITE_FILE_CACHE. "/" . $key . ".php" ))          {               return  true;          }           else           {               return  false;          }      }             /**        * 清除所有缓存文件        * @return Bool        */              public   static   function  clearAllCache()      {           $files  = scandir(__SITE_FILE_CACHE);           foreach  ( $files   as   $val )          {              @unlink(__SITE_FILE_CACHE. "/" . $val );            }      }             /**        * 出错处理函数        * @param $line 行数        * @param $msg  信息        */        public   static   function  error( $line , $msg )      {           die ( "出错文件:" .__file__. "/n出错行:$line/n错误信息:$msg" );      }  }    ?> 

查看更多关于几个简单的php数据文件缓存类 - php类库的详细内容...

  阅读:53次