我有一个大型的2d数组,我将其序列化并将base64_encode投入数据库。在另一个页面上,我将数组拉出来,当我base64_decode
序列化数组时,我可以将它回显出来,它看起来确实有效。
然而,如果我尝试unserialize(base64_decode($serializedArray))
,它只会抛出相同的错误到几乎崩溃的Firefox。
错误是:
警告:
unserialize()
[function.unserialize]:第24行的/var/www/dev/wc_paul/inc/analyzerTester.php中不再存在节点
我会包含我回应的整个序列化数组,但是上次我在这个表单上尝试过它会使我的Firefox崩溃。
有谁知道为什么会这样?
答案 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)
确保您没有序列化资源,它们无法序列化。