第一种是数组序列化,简单,但是调用时比较麻烦一些;第二种是保存为标准的数组格式,保存时麻烦但是调用时简单。
第一种方法:
1 $file="./cache/file.cache"; 2 $array = array("color" => array("blue", "red", "green"), 3 "size" => array("small", "medium", "large")); 4 //缓存 5 file_put_contents($file,serialize($array));//写入缓存 6 //读出缓存 7 $handle = fopen($file, "r"); 8 $cacheArray = unserialize(fread($handle, filesize ($file)));
第二种方法:
比较复杂,先贴几个函数:
1 //写入 2 function cache_write($name, $var, $values) { 3 $cachefile = S_ROOT.'./data/data_'.$name.'.php'; 4 $cachetext = "<?php\r\n". 5 "if(!defined('CHECK_CODE')) exit('Access Denied');\r\n". 6 '$'.$var.'='.arrayeval($values). 7 "\r\n?>"; 8 if(!swritefile($cachefile, $cachetext)) { 9 exit("File: $cachefile write error."); 10 } 11 } 12 //数组转换成字串 13 function arrayeval($array, $level = 0) { 14 $space = ''; 15 for($i = 0; $i <= $level; $i++) { 16 $space .= "\t"; 17 } 18 $evaluate = "Array\n$space(\n"; 19 $comma = $space; 20 foreach($array as $key => $val) { 21 $key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key; 22 $val = !is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12) ? '\''.addcslashes($val, '\'\\').'\'' : $val; 23 if(is_array($val)) { 24 $evaluate .= "$comma$key => ".arrayeval($val, $level + 1); 25 } else { 26 $evaluate .= "$comma$key => $val"; 27 } 28 $comma = ",\n$space"; 29 } 30 $evaluate .= "\n$space)"; 31 return $evaluate; 32 } 33 //写入文件 34 function swritefile($filename, $writetext, $openmod='w') { 35 if(@$fp = fopen($filename, $openmod)) { 36 flock($fp, 2); 37 fwrite($fp, $writetext); 38 fclose($fp); 39 return true; 40 } else { 41 runlog('error', "File: $filename write error."); 42 return false; 43 } 44 }
调用方法很简单:
PHP代码
1 cache_write('file', 'arrayName', $array);
使用上形同标准的include格式:
1 @include ('./data/data_cache.php'); 2 //数组重新排序 3 sort($arrayName);
今天在研究缓存的时候找到这文章,很实用,保留下来以后忘记了什么再来看。