常见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 (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程序设计有所帮助。

以上是 常见php数据文件缓存类汇总 的全部内容, 来源链接: utcz.com/z/348669.html

回到顶部