php - 将 PHP 序列化从 PHP 5.3 迁移到 PHP 5.6

标签 php serialization migration

我有一个复杂的结构,它使用 serialize() 函数保存在 MySQL 数据库中,然后使用 unserialize() 转换回来。将系统从 PHP 5.3 迁移到 PHP 5.6 并在 5.6 中反序列化在 5.3 上序列化的数据后,结构已损坏。对对象的某些引用现在显示为数组。

我的问题是:

  1. 是否有关于不同PHP版本中序列化/反序列化使用不同编码的规范? (在我的 Google 搜索或 PHP.net 上的文档中找不到足够具体的内容)

  2. 如何将序列化数据从 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/

相关文章:

php - 删除句子中的所有空格和逗号

php - Symfony2 Doctrine : How to disable mysql connection?

migration - MediaWiki 到 Confluence 迁移

mysql - 通过事件记录迁移将 rename_column 和 change_column 合二为一

djangocms : move data from deprecated cmsplugin-filer-*-plugins to djangocms-*-plugins

php - 从mysql数据库单个 "cell"的大量数据中提取特定数据

javascript - 每个 session 模态显示一次

java - java 枚举上的自定义字段未被序列化

c# - 序列化从 CLR 类型继承的 IronPython 对象

c++ - 在执行二进制序列化时删除 stringstream 结果的 const-ness 是否安全?