什么可能导致PHP序列化功能失败?

Gor*_*ter 2 php serialization persistence amf

我有一些服务器端PHP代码尝试将数据对象(实质上是一个多维数组)持久存储到后端数据库.此数据对象最初是作为从Flex应用程序发送的AMF actionscript对象引入的.我想要将整个对象持久化以供以后使用,所以我使用了php serialize函数并将对象编码为一个可以进入数据库字段的简单字符串.代码如下所示:

$serializedDataObject = base64_encode(serialize($objectInstance->myDataObject));
Run Code Online (Sandbox Code Playgroud)

当我想要恢复这个对象并将其恢复时,我只需反过来运行

$unserializedDatanObject = unserialize(base64_decode($serializedDataObject));
Run Code Online (Sandbox Code Playgroud)

到目前为止,这似乎运作良好.但有时我的PHP脚本失败.我认为它在序列化步骤中失败了.从理论上讲,我的问题是什么可能导致php序列化和编码过程失败?数据对象数组中是否存在某些可能导致序列化为bork的字符或数据类型?

在尝试序列化之前,是否需要对数据对象进行一些按摩?

编辑:

澄清这个过程是这样的

我有一个Flex/Actionscript客户端应用程序,它将基于AMF的actionscript对象发送到服务器.在PHP方面,我使用Zend AMF库来读取AMF数据.该对象可以在PHP中检查,基本上看起来像一个关联的多维数组.正是在这一点上,我尝试序列化和基础64编码对象,以便我可以将对象作为编码字符串持久保存到数据库.

希望这是有道理的.这个问题是间歇性的,不容易一致地重现.如果我能得到一些具体的错误消息,我会在这里发布以便进一步说明.但是现在我只是想知道序列化的限制是什么来帮助我进一步调试.

nic*_*ckf 5

资源无法序列化,这可能是问题所在.避免这个问题的一种方法是使用魔术方法:__sleep__wakeup.

基本上,__sleep当你调用serialize时调用你的函数,并且__wakeup当你反序列化时调用你的函数,所以说它是一个数据库连接:在sleep()中关闭连接并将连接字符串存储在某处(可能),并在唤醒时重新连接.