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

2015-01-24信息快讯网

这篇文章主要介绍了常见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"); 
    } 
} 
?>

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

php使用正则表达式获取图片url的方法
php使用CURL伪造IP和来源实例详解
php+mysql实现无限分类实例详解
php截取html字符串及自动补全html标签的方法
php在linux下检测mysql同步状态的方法
php实现redis数据库指定库号迁移的方法
php导入excel文件到mysql数据库的方法
php页面缓存方法小结
PHP上传文件时自动分配路径的方法
php实现按照权重随机排序数据的方法
PHP中使用SimpleXML检查XML文件结构实例
php静态文件返回304技巧分享
php使用fputcsv()函数csv文件读写数据的方法
thinkphp备份数据库的方法分享
php实现监控varnish缓存服务器的状态
为PHP5.4开启Zend OPCode缓存
PHP使用memcache缓存技术提高响应速度的方法
smarty缓存用法分析
Codeigniter框架实现获取分页数据和总条数的方法
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
ThinkPHP模版引擎之变量输出详解
ThinkPHP添加更新标签的方法
彻底删除thinkphp3.1案例blog标签的方法
php树型类实例
Yii配置文件用法详解
Dwz与thinkphp整合下的数据导出到Excel实例
Yii实现MySQL多数据库和读写分离实例分析
thinkphp配置连接数据库技巧
php获取CSS文件中图片地址并下载到本地的方法
php面象对象数据库操作类实例
php设置静态内容缓存时间的方法
CI框架给视图添加动态数据
php生成html文件方法总结
ThinkPHP实现动态包含文件的方法
PHP静态文件生成类实例
thinkphp的静态缓存用法分析
php文件缓存类汇总
php禁止浏览器使用缓存页面的方法
PHP文件缓存内容保存格式实例分析
©2014-2024 dbsqp.com