之前同事在本地开发的时候,出现一个错误,如下图所示:

字面意思就是反序列化错误,由此bug引申出来序列化和反序列化得应用,以及php array当key为string类型的数字值时,会发生什么情形。

先来看序列化

$str = [

1 => 2,

'str' => '字符串'

];

var_dump( serialize($str) );

//结果:serialize.php:7:string 'a:2:{i:1;i:2;s:3:"str";s:9:"字符串";}' (length=40)

//其中第一个a 表示数据是个array 2表明长度为2

//{} 中表示数组内容

//i:1;i:2

// i表示为key为int类型 1表示key值为1

// i表示为value为int类型 2表示value值为2

//s:3:"str";s:9:"字符串"

// s表示key为string类型 3表示key长度为3 "str"表示value值为"str"

// s表示value为string类型 9表示value长度为9 "字符串"表示value值为"字符串"

第二点PHP中数组,会把在常量PHP_INT_MAX(int最大值)范围内的string类型的数值key自动转换成int类型。若数组的key超出常量PHP_INT_MAX的值,则此key仍然保持string类型,反之,被转换成int类型。

示例代码如下:

var_dump( PHP_INT_MAX );

$str = [

'1' => 111,

'9223372036854775808' => 'PHP_INT_MAX + 1'

];

var_dump($str);

输出结果如下图:

可以看到 key为'1'时在输出时变成了 1,而大于PHP_INT_MAX值得key依然是字符串。

回到标题反序列化错误的bug。

同事在本地开发的PHP_INT_MAX与测试环境不同,且在本地开发环境与测试环境存储在同一数据中。这个时候,就会出现报错的情况。即在本地开发中,可能PHP_INT_MAX较小,序列化会将数值转换成s,而测试环境PHP_INT_MAX较大,序列化会将数值转换成i。这个时候存储不统一,就会造成在一个环境中序列化,在另一个环境反序列化,报标题的错误。

php serialize error at offset,PHP Notice: unserialize(): Error at offset XX of XX bytes相关推荐

  1. [php错误]PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> php 5.5以前 function mb_unserialize($serial_str) { return preg_re ...

  2. php serialize error at offset,unserialize(): Error at offset出现的原因分析以及解决方法

    在PHP的unserialize函数使用中,当字符串或数据库中取出的数据有中文的时候,会出现如下错误Notice: unserialize(): Error at offset xx of xxx b ...

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

    thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes如何解决 一.总结 一句话总结:清缓存就好了,所以框架有问题可以考虑清缓存 清缓存 ...

  4. {“error“:{“root_cause“:[{“type“:“script_exception“,“reason“:“compile error“,“script_stack“:[“... par

    前言 最近想更新ES里面已经存在的数据,报错 错误如下 {"error":{"root_cause":[{"type":"scri ...

  5. Conversion error:Jekyll::Converters::Scss encountered an error while converting css/main.scss

    错误描述:Conversion error: Jekyll::Converters::Scss encountered an error while converting 'css/main.scss ...

  6. localhost: Error: JAVA_HOME is not set. [Hadoop] Error: JAVA_HOME is not set

    localhost: Error: JAVA_HOME is not set. 在namenode启动脚本%Hadoop_HOME%/bin/start-dfs.sh的时候发现datanode报错: ...

  7. ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale

    ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale 目录 ERROR w ...

  8. 【报错】ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds t

    设置mysql中的root账户密码出现1064错误代码 ERROR 1064 (42000): You have an error in your SQL syntax; check the manu ...

  9. 安装Uikit时ERROR in Entry module not found: Error: Can't resolve './src' in 'xxx'的解决思路

    yarn安装Uikit时遇到了ERROR in Entry module not found: Error: Can't resolve './src' in 'xxx'这个问题 反复查看官方文档依然 ...

最新文章

  1. 阅读论文《一种金融市场预测的深度学习模型FEPA》(1)
  2. centos 7 单用户模式无法重置root密码 解决方法
  3. JAVA中文支持指南(Vera Yuanti)
  4. 代码行数越少就越“简单”吗?
  5. 搭建nfs共享存储服务之三客户端配置
  6. 关于动网论坛、动力起航、自由动力、动易、动感购物、乔客、织梦CMS.
  7. 华为hwics格式产品文档打开方式
  8. 【资源分享】Go语言并发之道 [美] 凯瑟琳(Katherine Cox-Buday)著 PDF 下载
  9. react+UmiJS+Antd Pro简介
  10. 咱们的课程里,有微信的这种菜单示例吗?---酷课堂iOS交流群问答整理(201810期)
  11. 学生信息管理系统软件测试计划,学生信息管理系统软件测试计划书.doc
  12. ADS2015导入飞思卡尔元器件模型 安装DesignKit
  13. GDB 调试错误解决
  14. 怎么制作你的第一个机器人
  15. B站视频下载 bilibili 哔哩哔哩
  16. C1见习工程师(二)
  17. 论文阅读笔记:《Neural3D: Light-weight Neural Portrait Scanning via Context-aware Correspondence Learning》
  18. 【网络】内网访问外网和外网访问内网的原理
  19. UML建模学成在线管理系统
  20. Java前端和后端的区别?

热门文章

  1. oracle消耗内存的查询,在AIX中计算ORACLE消耗的私有内存总数
  2. c# 替换html注释,C# 替换div标签
  3. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...
  4. db2与mysql编目_DB2编目、联邦数据库 - Goopand's OS Space - OSCHINA - 中文开源技术交流社区...
  5. linux课堂笔记(6)
  6. java匿名对象 回收_Java 匿名对象
  7. java多线程activemq,多线程JMS客户端ActiveMQ
  8. 利用IDisposable接口构建包含非托管资源对象
  9. Jetbrains 系 IDE 编辑器的代码提示功能
  10. Python基础语法学习整理