常见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 编写安全的代码时容易犯的错误小结
May 20 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 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
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
php框架Phpbean说明
2008/01/10 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python 日期与时间转换的方法
2020/08/01 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
Why we need EJB
2016/10/20 面试题
运动会广播稿200字
2014/01/15 职场文书
解除劳动合同协议书
2014/04/14 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
庭外和解协议书
2016/03/23 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server