thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes如何解决

thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes如何解决

1、总结

一句话总结:清缓存就行了,因此框架有问题能够考虑清缓存

清缓存

 

一、thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes的缘由是什么?

phpStorm改文件名自动更新了缓存 而且自动更新的缓存内容不对

出错缘由:移过来更名字的时候phpStorm的自动更新引用更新了缓存(我看的清清楚楚,没截到图),因此致使了错误php

 

二、学thinkphp框架及其它框架很好且可行的措施是什么?

按着框架运行流程打印中间变量

按着框架运行流程,打印中间变量,确定能够学好框架,毕竟排系统错误的时候就是这么排的html

 

 

 

2、清缓存就行了

 

出现的缘由应该是改变了文件名,可是缓存自动更新(我用的phpstorm自动更新相关文件)的不对,因此致使错误,因此清理一下缓存就行了正则表达式

 

 

出错缘由:移过来更名字的时候phpStorm的自动更新引用更新了缓存(我看的清清楚楚),因此致使了错误thinkphp

 

报错示意图数据库

 而且,dump一下出错的位置的变量,也能够发现是缓存出了问题,改了名字的文件的路径对不上数组

 

 

3、unserialize(): Error at offset 0 of 96 bytes出现的缘由分析以及解决方法

参考:unserialize(): Error at offset 0 of 96 bytes出现的缘由分析以及解决方法
https://blog.csdn.net/glx490676405/article/details/79041405缓存

出现问题: 从数据库中取出数据后进行反序列化后,php报错 unserialize(): Error at offset 0 of 96 bytes;php框架

分析缘由:英文数据中含有中文字符串,因此咱们就能够想到编码的问题,serialize()函数对在不一样编码下对中文的处理结果是不同的。框架

再讲gbk转换成utf8的格式后,每一个中文的编码数从2个会增长到3个,因此会致使反序列化的时候判断字符长度出现问题。phpstorm

解决方法 : 使用正则表达式将序列化的数组中的表示字符长度的值从新计算一遍

具体代码:php5.5如下 :

 

 
  
function mb_unserialize($str) {
    $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $str );
return unserialize($out);
}

可是因为PHP自己 /e模式的漏洞,php5.5+,已经废弃了这种用法

 

PHP 5.5+

 

function mb_unserialize($str) {
    return preg_replace_callback('#s:(\d+):"(.*?)";#s',function($match){return 's:'.strlen($match[2]).':"'.$match[2].'";';},$str);
}
相关文章
相关标签/搜索