本文实例汇总了常见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 (emptyempty($arrayName))   {    $evaluate = "arrayn$space(n";   }   else   {    $evaluate = "${$arrayName} = arrayn$space(n";   }    $space2 = str_repeat("t", $level + 1);   $comma = $space2;   if (!emptyempty($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来缓存数据,这里提供这个文件缓存的类,代码如下:复制代码 代码如下:<?php /**  * 文件缓存类  * 提供文件缓存  */ 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");     } } ?>

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。