几个简单的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 ( empty empty ( $arrayName )) { $evaluate = "arrayn$space(n" ; } else { $evaluate = "${$arrayName} = arrayn$space(n" ; } $space2 = str_repeat ( "t" , $level + 1); $comma = $space2 ; if (! empty empty ( $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 , $arrayName , $data );memcache来缓存数据, 提供这个文件缓存的类m希望大家可以看看,代码如下:
<?php /** * 文件缓存类 * 提供文件缓存 * @author guoyubin(263421949@qq测试数据) */ 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" ); } } ?>查看更多关于几个简单的php数据文件缓存类 - php类库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29539