2008-09-23 3 views
0

У меня есть большой массив 2d, который я сериализую и base64_encode и бросаю в базу данных. На другой странице я вытаскиваю массив, и когда я base64_decode сериализованный массив, я могу повторить его, и он определенно выглядит действительным.PHP unserialize продолжает бросать ту же ошибку более 100 раз

Однако, если я пытаюсь выполнить unserialize(base64_decode($serializedArray)), он просто бросает ту же ошибку, что и почти сбой Firefox.

Ошибка:

Внимание: unserialize() [function.unserialize]: Узел больше не существует в /var/www/dev/wc_paul/inc/analyzerTester.php на линии 24

Я бы включил весь сериализованный массив, который я эхо, но в прошлый раз я пробовал, что на этой форме он разбил мой Firefox.

Кто-нибудь может понять, почему это может произойти?

+0

Даже если бы я не ставил его в SQL и просто пойти десериализации (сериализации ($ массив)); Я получаю те же ошибки. – thirsty93 2008-09-23 05:10:39

+0

Я уверен, что это массив. Тем не менее, это был изначально ответ xml с другого сервера, который затем вытащил значения из массива. Если он не может быть сериализован, я могу согласиться с тем, что думаю .... , но как мне его сохранить? – thirsty93 2008-09-23 14:55:22

ответ

5

Вы уверены, что вы просто сериализуете массив, а не объект (например, DOMNode?) Как и ресурсы, не все классы будут довольны тем, что несериализованы. В качестве примера с DOM (с вашей ошибкой указывает на то, с чем вы работаете) каждый узел имеет ссылку на parentNode, и если parentNode не существует в тот момент, когда узел не является несериализованным, он не может воссоздать эту ссылку и проблемы.

Я бы предложил сохранить дерево Dom как XML в базу данных и загрузить его позже.

+0

На самом деле, в быстрой ошибке Google появляется несколько страниц, на которых SimpleXML сериализуется, а unserialize вызывает ошибку. – 2008-09-23 13:22:47

3

Убедитесь, что поле базы данных достаточно велико, чтобы провести сериализованный массив. Сериализованные данные очень неэффективны в PHP, и многие БД (например, MySQL) будут молча усекать значения полей, которые слишком велики.

0

Какие элементы находятся в вашем массиве? serialize/unserialize не работает со встроенными объектами PHP, и это обычно является причиной этой ошибки.

Кроме того, на основе вашего комментария это не ваша проблема, но для экономии места в вашей базе данных не base64 не кодирует данные, просто избегайте их. то есть для mysql использовать mysql_real_escape_string.

0

Убедитесь, что вы не сериализуете ресурсы, они не могут быть сериализованы. не

[email protected]

Смежные вопросы