zoukankan      html  css  js  c++  java
  • 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的自动更新引用更新了缓存(我看的清清楚楚,没截到图),所以导致了错误

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

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

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

    二、清缓存就好了

    出现的原因应该是改变了文件名,但是缓存自动更新(我用的phpstorm自动更新相关文件)的不对,所以导致错误,所以清理一下缓存就好了

    出错原因:移过来改名字的时候phpStorm的自动更新引用更新了缓存(我看的清清楚楚),所以导致了错误

    报错示意图

     并且,dump一下出错的位置的变量,也可以发现是缓存出了问题,改了名字的文件的路径对不上

    三、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;

    分析原因:英文数据中含有中文字符串,所以我们就可以想到编码的问题,serialize()函数对在不同编码下对中文的处理结果是不一样的。

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

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

    具体代码: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);
    }

     

     
  • 相关阅读:
    [TED]丹·吉尔伯特:我们为什么快乐?
    GTD 工具软件
    康奈尔笔记法(5R笔记法)
    ACM退役感言
    YCSB_对mongodb进行性能测试
    Python_列表比较大小
    Python_issubclass&isinstance方法和types&inspect内置模块
    由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目 "xxx" 的解决方法
    北京技能视频学习自动播放
    JQuery在UpdatePanel中当事件点击后JQuery事件不起作用的解决办法(JQuery与UpdatePanel问题解析)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10652715.html
Copyright © 2011-2022 走看看