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


Posted in PHP onDecember 05, 2014

本文实例汇总了常见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 相关文章推荐
PHP设计聊天室步步通
Oct 09 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
php ajax实现文件上传进度条
Mar 29 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 #PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 #PHP
ThinkPHP添加更新标签的方法
Dec 05 #PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 #PHP
php树型类实例
Dec 05 #PHP
Yii框架form表单用法实例
Dec 04 #PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 #PHP
You might like
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
PHP 源代码压缩小工具
2009/12/22 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python3.4解释器用法简单示例
2019/03/22 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Python测试线程应用程序过程解析
2019/12/31 Python
python读取mysql数据绘制条形图
2020/03/25 Python
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
保护地球的标语
2014/06/17 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB