常见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 相关文章推荐
drupal 代码实现URL重写
May 04 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
Jun 05 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
php限制文件下载速度的代码
Oct 20 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
php扩展开发入门demo示例
2019/09/23 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
js 函数的副作用分析
2011/08/23 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
Python元字符的用法实例解析
2018/01/17 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python装饰器常见使用方法分析
2019/06/26 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
2014年勤工助学工作总结
2014/11/24 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang