常见php数据文件缓存类汇总
本文实例汇总了常见php数据文件缓存类。分享给大家供大家参考。具体分析如下:
数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存。感兴趣的朋友可以参考一下。
1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了.
2.对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了.
3.缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库.
文件缓存类,代码如下:
<?php classDataCache { /** *数组转换 * *@paramarray$array *@paramstring$arrayName *@paramarray$level * *@returnstring */ privatefunctionarrayEval($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($arrayas$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; } /** *写入缓存 * *@paramstring$path *@paramstring$arrayName *@paramarray $data * *@returnboolean */ publicstaticfunctionwriteCache($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) { returntrue; } } returnfalse; } } ?>
调用方法,代码如下:
/** *生成文件缓存 * *@paramstring$filePath缓存文件的保存路径 *@paramstring$arrayName存放在缓存文件中的数组名称 *@paramarray$data数据 * *@returnboolean */ DataCache::writeCache($filePath,$arrayName,$data);
memcache来缓存数据,这里提供这个文件缓存的类,代码如下:
<?php /** *文件缓存类 *提供文件缓存 */ classCache_FileCache{ /** *设置缓存 *@param$key缓存的关键字key *@param$data缓存的内容 *@param$cacheLife缓存时间(单位为秒)如果为0则表示无限时间 *@returnBool */ publicstaticfunctionsetCache($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)orself::error(__line__,"文件写入出错"); $chmodReslut = @chmod($file,0777)orself::error(__line__,"设定文件权限失败"); if($setReslut&&$chmodReslut) { returntrue; } else { returnfalse; } } } /** *得到缓存数据 *@param$key缓存的关键字key *@returnarray */ publicstaticfunctiongetCache($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); returnarray(); } } } /** *删除缓存文件 *@param$key缓存$key *@returnBool */ publicstaticfunctiondelCache($key) { if(@unlink(__SITE_FILE_CACHE."/".$key.".php")) { returntrue; } else { returnfalse; } } /** *清除所有缓存文件 *@returnBool */ publicstaticfunctionclearAllCache() { $files=scandir(__SITE_FILE_CACHE); foreach($filesas$val) { @unlink(__SITE_FILE_CACHE."/".$val); } } /** *出错处理函数 *@param$line行数 *@param$msg 信息 */ publicstaticfunctionerror($line,$msg) { die("出错文件:".__file__."/n出错行:$line/n错误信息:$msg"); } } ?>
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。