我有一个复杂的结构,它使用 serialize() 函数保存在 MySQL 数据库中,然后使用 unserialize() 转换回来。将系统从 PHP 5.3 迁移到 PHP 5.6 并在 5.6 中反序列化在 5.3 上序列化的数据后,结构已损坏。对对象的某些引用现在显示为数组。
我的问题是:
是否有关于不同PHP版本中序列化/反序列化使用不同编码的规范? (在我的 Google 搜索或 PHP.net 上的文档中找不到足够具体的内容)
如何将序列化数据从 PHP 5.3 编码转换为 PHP 5.6 编码?
最佳答案
是的,对象的序列化在 PHP5.6 中改变了。特别是一些与对象序列化相关的领域在 PHP5.6 中得到了整理
在 PHP unserialize manual 中有一条模糊的注释提到了这一点:
5.6.0 Manipulating the serialised data by replacing C: with O: to force object instantiation without calling the constructor will now fail.
然而,查看错误列表会发现在 report 68099 中还有更多内容.它还声明原始格式没有官方文档:
"the original behavior (that we allow the old serialize format to be used for classes using the new format) was never documented nor officially supported,"
请注意,该讨论的最终结果是“不会修复”。
所以基本上,您的选择是:
尝试使用其他序列化程序之一作为在 PHP 版本之间导出数据的方法。如session_encode它还可以处理对象。
一个转换脚本。有一个广泛记录的版本 PHP internals 上的当前格式,您可以将其与 旧格式上的迭代器以更新语法。
关于php - 将 PHP 序列化从 PHP 5.3 迁移到 PHP 5.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40831191/