У меня есть большой массив 2d, который я сериализую и base64_encode, и бросаю в базу данных. На другой странице я вытаскиваю массив, и когда я base64_decode
сериализованный массив, я могу повторить его, и он определенно выглядит действительным.
Тем не менее, если я пытаюсь выполнить unserialize(base64_decode($serializedArray))
он просто бросает ту же ошибку до точки почти сбой Firefox.
Ошибка:
Предупреждение:
unserialize()
[function.unserialize]: Узел больше не существует в /var/www/dev/wc_paul/inc/analyzerTester.php в строке 24
Я бы включил весь сериализованный массив, который я повторяю, но в прошлый раз, когда я попробовал, в этой форме он разбил мой Firefox.
Кто-нибудь знает, почему это может произойти?
Вы уверены, что вы просто сериализуете массив, а не объект (например, DOMNode?). Подобно ресурсам, не все классы будут довольны несериализацией. В качестве примера с DOM (с вашей ошибкой указывает на то, с чем вы работаете) каждый узел имеет ссылку на parentNode, и если parentNode не существует в тот момент, когда узел не является несериализованным, он не может воссоздать эту ссылку и проблемы.
Я бы предложил сохранить дерево dom как XML в базу данных и загрузить его позже.
Убедитесь, что поле базы данных достаточно велико, чтобы хранить сериализованный массив. Сериализованные данные очень неэффективны в PHP, и многие БД (например, MySQL) будут молча усекать значения полей, которые слишком велики.
Какие типы элементов находятся в вашем массиве? serialize / unserialize не работает со встроенными объектами PHP, и это обычно является причиной этой ошибки.
Кроме того, на основе вашего комментария это не ваша проблема, но для экономии места в вашей базе данных не кодируйте данные base64, просто избегайте его. т.е. для mysql используйте mysql_real_escape_string.
Убедитесь, что вы не сериализуете ресурсы, они не могут быть сериализованы.