源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

[PHP编程] 常见php数据文件缓存类汇总

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2018-12-25 17:48:38 | 显示全部楼层 |阅读模式
这篇文章主要介绍了常见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程序设计有所帮助。

回复

使用道具 举报

0

主题

2万

回帖

120

积分

注册会员

Rank: 2

积分
120
发表于 2023-7-17 20:07:44 | 显示全部楼层
强烈支持楼主ing……
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

307

积分

中级会员

Rank: 3Rank: 3

积分
307
发表于 2023-9-11 00:41:42 | 显示全部楼层
还有人在不。。。。。。。。。。啊
回复 支持 反对

使用道具 举报

1

主题

1万

回帖

51

积分

注册会员

Rank: 2

积分
51
发表于 2023-12-6 14:39:37 | 显示全部楼层
天天源码社区论坛
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

316

积分

中级会员

Rank: 3Rank: 3

积分
316
发表于 2024-3-12 22:38:07 | 显示全部楼层
挺不错的东西
回复 支持 反对

使用道具 举报

14

主题

1万

回帖

75

积分

注册会员

Rank: 2

积分
75
发表于 2024-5-5 04:45:26 | 显示全部楼层
怕怕怕怕怕怕怕怕怕怕怕怕怕怕
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-7-25 21:10:27 | 显示全部楼层
sdsadsadsadf
回复 支持 反对

使用道具 举报

9

主题

2万

回帖

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2024-8-31 14:59:18 | 显示全部楼层
先把创新班才能下班才能下班
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

319

积分

中级会员

Rank: 3Rank: 3

积分
319
发表于 2024-9-12 20:29:44 | 显示全部楼层
啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
回复 支持 反对

使用道具 举报

27

主题

2万

回帖

331

积分

中级会员

Rank: 3Rank: 3

积分
331
发表于 2024-9-13 03:18:15 | 显示全部楼层
天天源码社区www.tiantianym.com
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-2-6 01:55 , Processed in 0.075594 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表