常见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使用JSON和将json还原成数组
Feb 12 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
php命令行写shell实例详解
Jul 19 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
php7 图形用户界面GUI 开发示例
Feb 22 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(1)
2006/10/09 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python实现的端口扫描功能示例
2018/04/08 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
学生个人的自我评价分享
2013/11/05 职场文书
最新自我评价范文
2013/11/16 职场文书
任课老师推荐信范文
2013/11/24 职场文书
结婚喜宴主持词
2014/03/14 职场文书
辩论赛主持词
2014/03/18 职场文书
2015年工会工作总结
2015/03/30 职场文书
会计主管岗位职责
2015/04/02 职场文书
初中政治教师教学反思
2016/02/23 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技