微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php cache类代码(php数据缓存类)

如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做PHP 数据cache(缓存)是十分必要的,我做了一个简单的PHP文件缓存”的类,希望对大家有所帮助。

思路是这样的:

对于一般的变量,把该变量变成PHP语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了;
对于array型的变量,把array转化为PHP语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了;
缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库,返回数据,再更新缓存。(尚未实现)

下面是我的PHP-kcache类(PHP_kcache_class.PHP):


注:如果是缓存字符串,请把转义字符多写一个'\',即”\n”要写成”\n”。
<div class="codetitle"><a style="CURSOR: pointer" data="30834" class="copybut" id="copybut30834" onclick="doCopy('code30834')"> 代码如下:
<div class="codebody" id="code30834">
/
//PHP-kcache class v_0.1
//Author: kangzj
//Email : kangzj@mail.bnu.edu.cn
//Blog : http://kangzj.net.ru
//作者不保证本程序没有bug,对于使用本程序
//而引起的任何问题不担负任何责任。
/
class PHP_kcache {
//相对或者绝对目录,末尾不要加 '/'
var $cache_dir = './cache';
var $cache_extension = '.cache.PHP'; function set_cache($name,$value){
$pre = "< ?\n//Cache Created at: ".date('Y-m-d H:i:s')."\n";
if(!is_array($value)){
$value = $value;
$str = "\$$name = '$value';";
}else{
$str = "\$$name = " . $this->arrayeval($value) . ';';
}
$end = "\n?>";
echo $cache = $pre . $str . $end;
$cache_file = $this->cache_dir . '/' . $name . $this->cache_extension; if($fp = @fopen($cache_file,'wb')) {
fwrite($fp,$cache);
fclose($fp);
return true;
} else {
echo $cache_file;
exit('Can not write to cache files,please check cache directory ');
return false;
}
} //将array变成字符串,来自discuz!
function arrayeval($array,$level = 0) { if(!is_array($array)) {
return "'".$array."'";
} $space = '';
for($i = 0; $i < = $level; $i++) {
$space .= "\t";
}
$evaluate = "Array\n$space(\n";
$comma = $space;
if(is_array($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$space";
}
}
$evaluate .= "\n$space)";
return $evaluate;
}
}

最简单的调用方法

<div class="codetitle"><a style="CURSOR: pointer" data="22548" class="copybut" id="copybut22548" onclick="doCopy('code22548')"> 代码如下:
<div class="codebody" id="code22548">
include './PHP_kcache_class.PHP';
$pc = new PHP_kcache;
$a = array('a','b','c');
$pc->set_cache('a',addslashes($a));

复杂的调用方法(加上缓存时间控制的)——稍后补上….to be continued…

原文地址:https://www.jb51.cc/php/28643.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐