0

我有一个大型二维数组,我对其进行序列化和 base64_encode 并放入数据库中。在不同的页面上,我将数组拉出,当我base64_decode序列化数组时,我可以将其回显,它看起来确实有效。

但是,如果我尝试这样unserialize(base64_decode($serializedArray))做,只会引发相同的错误,以至于 Firefox 几乎崩溃。

错误是:

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

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

有谁知道为什么会发生这种情况?

4

4 回答 4

5

您确定您只是在序列化一个数组,而不是一个对象(例如 DOMNode?) 像资源一样,并非所有类都会对反序列化感到满意。作为 DOM 的示例(您的错误向我表明您正在使用它),每个节点都有对 parentNode 的引用,如果在节点被反序列化时 parentNode 不存在,它不能重新创建该参考和随之而来的问题。

我建议将 dom 树作为 XML 保存到数据库中,然后再将其加载回来。

于 2008-09-23T05:13:25.817 回答
3

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

于 2008-09-23T05:30:10.673 回答
0

你的数组中有什么类型的元素?序列化/反序列化不适用于内置 PHP 对象,这通常是导致该错误的原因。

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

于 2008-09-23T05:46:20.573 回答
0

确保你不序列化资源,它们不能被序列化。

资源@php.net

于 2008-09-23T10:43:51.077 回答