我使用过两种办法:
第一种是数组序列化,简单,但是调用时比较麻烦一些;第二种是保存为标准的数组格式,保存时麻烦但是调用时简单。
第一种方法:
PHP代码
<BR>$file="./cache/file.cache"; <BR>$array = array("color" => array("blue", "red", "green"), <BR>"size" => array("small", "medium", "large")); <BR>//缓存 <BR>file_put_contents($file,serialize($array));//写入缓存 <BR>//读出缓存 <BR>$handle = fopen($file, "r"); <BR>$cacheArray = unserialize(fread($handle, filesize ($file))); <BR>
第二种方法:
比较复杂,先贴几个函数:
<BR>//写入 <BR>function cache_write($name, $var, $values) { <BR>$cachefile = S_ROOT.'./data/data<p style="color:transparent">2本文来源gao!daima.com搞$代!码网</p><span>搞代gaodaima码</span>_'.$name.'.php'; <BR>$cachetext = "<?php\r\n". <BR>"if(!defined('CHECK_CODE')) exit('Access Denied');\r\n". <BR>'$'.$var.'='.arrayeval($values). <BR>"\r\n?>"; <BR>if(!swritefile($cachefile, $cachetext)) { <BR>exit("File: $cachefile write error."); <BR>} <BR>} <BR>//数组转换成字串 <BR>function arrayeval($array, $level = 0) { <BR>$space = ''; <BR>for($i = 0; $i <= $level; $i++) { <BR>$space .= "\t"; <BR>} <BR>$evaluate = "Array\n$space(\n"; <BR>$comma = $space; <BR>foreach($array as $key => $val) { <BR>$key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key; <BR>$val = !is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12) ? '\''.addcslashes($val, '\'\\').'\'' : $val; <BR>if(is_array($val)) { <BR>$evaluate .= "$comma$key => ".arrayeval($val, $level + 1); <BR>} else { <BR>$evaluate .= "$comma$key => $val"; <BR>} <BR>$comma = ",\n$space"; <BR>} <BR>$evaluate .= "\n$space)"; <BR>return $evaluate; <BR>} <BR>//写入文件 <BR>function swritefile($filename, $writetext, $openmod='w') { <BR>if(@$fp = fopen($filename, $openmod)) { <BR>flock($fp, 2); <BR>fwrite($fp, $writetext); <BR>fclose($fp); <BR>return true; <BR>} else { <BR>runlog('error', "File: $filename write error."); <BR>return false; <BR>} <BR>} <BR>
调用方法很简单:
PHP代码
<BR>cache_write('file', 'arrayName', $array); <BR>
使用上形同标准的include格式:
PHP代码
<BR>@include ('./data/data_cache.php'); <BR>//数组重新排序 <BR>sort($arrayName); <BR>