我有一些服务器端的PHP代码,试图将数据对象(实质上是一个多维数组)存储到后端数据库。该数据对象最初是作为从Flex应用程序发送的AMF动作对象来的。我希望坚持整个对象以备后用,所以我使用了php序列化函数,并将对象编码为一个可以进入数据库字段的简单字符串。代码如下所示:什么可能导致PHP序列化函数失败?
$serializedDataObject = base64_encode(serialize($objectInstance->myDataObject));
当我想复活该对象,并把它带回我只需运行反向
$unserializedDatanObject = unserialize(base64_decode($serializedDataObject));
到目前为止,这似乎运作良好。但有时我的PHP脚本失败。我认为它在序列化步骤中失败了。我的问题是从理论上讲,可能导致php序列化和编码过程失败的原因是什么?数据对象数组中是否存在可能导致序列化出现的特定字符或种类的数据?
在我尝试序列化之前,是否需要对数据对象进行一些按摩?
编辑:
要澄清的过程是这样的
我发送基于AMF ActionScript对象到服务器的Flex /的ActionScript客户端应用程序。在PHP方面,我使用Zend AMF库来读取AMF数据。该对象可以在PHP中检查,基本上看起来像一个关联的多维数组。正是在这一点上,我试图序列化和基地64编码对象,以便我可以持久对象到数据库作为编码的字符串。
希望这是有道理的。问题是间歇性的,不容易一致地重现。如果我能得到一些特定的错误信息,我会在这里发布它们以供进一步澄清。但是现在我只是想知道序列化的局限性,以帮助我进一步调试。
脚本是否因特定错误/异常而失败?打开错误级别并确保display_errors已打开。 – Ian 2009-08-27 14:31:47
是的,我已经开启了报告,但错误信息对我来说有点神秘。奇怪的是,大部分时间都是这样。数据对象不是太复杂,整数,字符串,布尔值和日期。从我可以告诉它因为时间戳的一些变化而失败。换句话说,当对象被保存似乎是问题的根源。 – 2009-08-27 14:40:00
如果您发布了错误消息,我们可能会解密它 – Greg 2009-08-27 14:41:13