ThinkPHP6升级后 unserialize() Error at offset 0 of 176 bytes报错
找到文件 vendor/topthink/think-cache/src/cache/Driver.php
文件,如下方法,先将:
//判断$data是否为序列化字符串,如果不是直接返回不需要反序列化
if (!preg_match( '/^[asO]:[0-9]+:/s', $data)) {
return $data;
}
添加,如下。然后正常的方问网站如登陆后台等操作,待操作完成以后,即完成了字符序列化入数据库,然后会出现\u5148\u950b\u7f51\u7edc
的Unicode
代码,将其修改为正常的中文以后,再将下面新增的代码删除即可。
原因就是升级前的序列化入库与升级的序列化不同了。
/**
* 反序列化数据
* @access protected
* @param string $data 缓存数据
* @return mixed
*/
protected function unserialize(string $data)
{
//判断$data是否为序列化字符串,如果不是直接返回不需要反序列化
if (!preg_match( '/^[asO]:[0-9]+:/s', $data)) {
return $data;
}
$unserialize = $this->options['serialize'][1] ?? function ($data) {
SerializableClosure::enterContext();
$data = \unserialize($data);
SerializableClosure::unwrapClosures($data);
SerializableClosure::exitContext();
return $data;
};
return $unserialize($data);
}
Class 'think\cache\SerializableClosure' not found
ThinkPHP V6.0.13LTS { 十年磨一剑-为API开发设计的高性能框架 } - 官方手册
这里面没有SerializableClosure
可能是版本不同了!