常见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程序设计有所帮助。