加入收藏 | 设为首页 | 会员中心 | 我要投稿 怀化站长网 (https://www.0745zz.cn/)- 语音技术、云资源管理、物联设备、云计算、决策智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

常见php数据文件缓存类汇总

发布时间:2022-06-22 08:48:56 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了常见php数据文件缓存类,实例讲述了php文件缓存与利用memcache来缓存数据的方法,代码封装性好,使用简单,是非常实用的技巧,需要的朋友可以参考下。 本文实例汇总了常见php数据文件缓存类。分享给大家供大家参考,具体分析如下: 数据文件缓
  这篇文章主要介绍了常见php数据文件缓存类,实例讲述了php文件缓存与利用memcache来缓存数据的方法,代码封装性好,使用简单,是非常实用的技巧,需要的朋友可以参考下。
 
  本文实例汇总了常见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");
      } //www.phpfensi.com
  }
  ?>
  希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

(编辑:怀化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读