[TOC]
## cache_load
~~~
function cache_load($key, $unserialize = false) {
global $_W;
if (!empty($_W['cache'][$key])) {
return $_W['cache'][$key];
}
$data = $_W['cache'][$key] = cache_read($key);
//下面的cache_read()
if ($key == 'setting') {
$_W['setting'] = $data;
return $_W['setting'];
} elseif ($key == 'modules') {
$_W['modules'] = $data;
return $_W['modules'];
} elseif ($key == 'module_receive_enable' && empty($data)) {
cache_build_module_subscribe_type();
return cache_read($key);
} else {
return $unserialize ? ($data) : $data;
}
}
~~~
### cache_read()
~~~
function cache_read($key) {
$sql = 'SELECT `value` FROM ' . tablename('core_cache') . ' WHERE `key`=:key';
$params = array();
$params[':key'] = $key;
$val = pdo_fetchcolumn($sql, $params);
return iunserializer($val);
}
~~~
### iunserializer()
> 获取序列化字符的反序列化结果
**示例**
~~~
print_r(iunserializer('a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;}'));
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
~~~
**函数**
~~~
function iunserializer($value) {
if (empty($value)) {
return '';
}
//判断是否为序列化字符串
//不是就返回值
if (!is_serialized($value)) {
return $value;
}
//unserialize — 从已存储的表示中创建 PHP 的值
//unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
$result = unserialize($value);
//返回值
//返回的是转换之后的值,可为 integer、float、string、array 或 object。
//如果传递的字符串不可解序列化,则返回 FALSE,并产生一个 E_NOTICE。
if ($result === false) {
//preg_replace — 执行一个正则表达式的搜索和替换
$temp = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $value);
return unserialize($temp);
}
return $result;
}
~~~
`return $unserialize ? iunserializer($data) : $data;`
false,