Yir*_*her 9 php migration serialization
我有一个复杂的结构,使用serialize()函数保存在MySQL数据库中,然后使用unserialize()转换回来.将系统从PHP 5.3迁移到PHP 5.6并在5.6中反序列化在5.3上序列化的数据后,结构已损坏.对象的某些引用现在显示为数组.
我的问题是:
是否有关于不同PHP版本中序列化/反序列化使用的不同编码的规范?(在我的Google搜索或PHP.net上的文档中找不到任何具体的内容)
如何将序列化数据从PHP 5.3编码转换为PHP 5.6编码?
您可以将序列化数据转换为 JSON(使用 PHP 5.3 安装),将其保存到数据库,然后执行相反的操作(使用 PHP 5.6 安装)。
从 5.3 到 JSON:
$data = unserialize($strSerializedData);
$jsonData = json_encode($data);
Run Code Online (Sandbox Code Playgroud)
从 JSON 到 5.6 :
$data = json_decode($jsonData);
$strSerializedData= serialize($data );
Run Code Online (Sandbox Code Playgroud)
您可能需要调整发送到 json_decode 的选项以匹配原始数据。
此选项取决于正在序列化的数据。如果您的数据是类,那么这是行不通的。
另外,您的问题可能与文档中的此注释有关(此处):
5.6.0 通过将 C: 替换为 O: 来强制对象实例化而不调用构造函数来操作序列化数据现在将失败。