9
2010

UCHome 缓存技术的实现,PHP缓存技术实现

  在康盛UCH中创建缓存只要使用“cache_write”方法就可以直接生成缓存了,非常的方便。为此特地去寻找了下实现的方法以及缓存机制。

代码如下:

/**
*
* @param string $name
* @param $var
* @param $values
*
*/
define("S_ROOT",'cache/');
$name = 'test';
$vars = array('config','config2');
$values = array($vars,'sdfghf','trrsfa');
$var = '_SGLOBAL[\'test\']';

cache_write($name,$var,$values);

function cache_write($name, $var, $values) {
$cachefile = S_ROOT.'./data_'.$name.'.php';//设置缓存文件地址
//exit("File:$cachefile");
$cachetext = " // "if(!defined('IN_UCHOME')) exit('Access Denied');\r\n".
'$'.$var.'='.arrayeval($values).//将数组转换成字符串
"\r\n?>";
if(!swritefile($cachefile, $cachetext)) {
exit("File: $cachefile write error.");
}
}
/**
* 数组转换成字串
* @param array $array 要转换的数组
* @param int $level 数组的层次
* @return string 返回转换后的字符串
*/
function arrayeval($array, $level = 0) {
$space = '';
for($i = 0; $i <= $level; $i++) {
$space .= "\t";
}
$evaluate = "Array\n$space(\n";
$comma = $space;
foreach($array as $key => $val) {
//addcslashes($key, '\'\\');只对'与\进行转义
$key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;
//如果$key不是数字,则设置为字符串,如果是数字,则直接取数字
$val = !is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12 || substr($val, 0, 1)=='0') ? '\''.addcslashes($val, '\'\\').'\'' : $val;
//如果$val不是数字,则设置为字符串,如果是数字,则直接取数字
if(is_array($val)) {
//如果是数组,则再一次进行转换
$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
} else {
$evaluate .= "$comma$key => $val";
}
$comma = ",\n$space";
}
$evaluate .= "\n$space)";
return $evaluate;
}

//写入文件
function swritefile($filename, $writetext, $openmod='w') {
if(@$fp = fopen($filename, $openmod)) {
flock($fp, 2);
fwrite($fp, $writetext);
fclose($fp);
return true;
} else {
//runlog('error', "File: $filename write error.");

return false;
}
}

?>

发条评论

*

*