常见php数据文件缓存类汇总
常见php数据文件缓存类汇总
发布时间:2016-12-29 来源:查字典编辑
摘要:本文实例汇总了常见php数据文件缓存类。分享给大家供大家参考。具体分析如下:数据文件缓存的做法我们常用的有php文件缓存与利用memcach...

本文实例汇总了常见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 = "<" . $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教程学习
编程开发子分类