PHP unserialize不断抛出相同的错误超过100次

时间:2008-09-23 05:06:21

标签: php mysql serialization

我有一个大型的2d数组,我将其序列化并将base64_encode投入数据库。在另一个页面上,我将数组拉出来,当我base64_decode序列化数组时,我可以将它回显出来,它看起来确实有效。

然而,如果我尝试unserialize(base64_decode($serializedArray)),它只会抛出相同的错误到几乎崩溃的Firefox。

错误是:

  

警告:unserialize() [function.unserialize]:第24行的/var/www/dev/wc_paul/inc/analyzerTester.php中不再存在节点

我会包含我回应的整个序列化数组,但是上次我在这个表单上尝试过它会使我的Firefox崩溃。

有谁知道为什么会这样?

4 个答案:

答案 0 :(得分:5)

你确定你只是序列化一个数组,而不是一个对象(例如DOMNode?)就像资源一样,并非所有的类都会对被反序列化感到高兴。作为DOM的一个例子(你的错误告诉我你正在使用它),每个节点都有一个对parentNode的引用,如果在节点被反序列化时,parentNode不存在,它就不能重新创建这个参考和问题。

我建议将dom树保存为XML,然后再将其加载回来。

答案 1 :(得分:3)

确保数据库字段足以容纳序列化数组。 PHP中的序列化数据非常空间效率低,许多数据库(如MySQL)会默默地截断太长的字段值。

答案 2 :(得分:0)

您的阵列中有哪些类型的元素? serialize / unserialize不适用于内置的PHP对象,这通常是导致该错误的原因。

此外,根据您的评论,这不是您的问题,但为了节省数据库中的空间,请不要对数据进行base64编码,只需将其转义即可。即对于mysql使用mysql_real_escape_string。

答案 3 :(得分:0)

确保您没有序列化资源,它们无法序列化。

Resources@php.net