php教程

超轻量级php框架startmvc

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

更新时间:2020-03-01 11:18:49 作者:startmvc
本文实例汇总了常见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 数据 文件 缓存