微擎HTML开发,微擎开发之缓存 - YangJunwei

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值