常见php数据文件缓存类汇总
《PHP实战:常见php数据文件缓存类汇总》要点: PHP应用本文实例汇总了常见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,$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数据文件缓存类汇总》是否对您有启发,欢迎查看更多与《PHP实战:常见php数据文件缓存类汇总》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |