А хотелось бы начать со слов — если ничего не получается, прочитайте наконец-то инструкцию. Функции serialize — unserialize отлично работают в PHP, и чем дальше, тем лучше :). Тем не менее на форумах тут и там встречаются темы вроде — «А чем заменить сериализацию в PHP?» или «Сериализация своими руками..» (охота добавить при этом — «кривыми руками» или создать тему — «Сериализация через ж…»).
Как правило, проблемы возникают после извлечения сохраненных сериализованных данных из БД. Массивы не десериализуются, объекты не работают и прочая…
Что не так с объектами
Описание класса должно идти до того как вы выполните unserialize. Если нужно выполнить на этом этапе какие то действия над объектом — опишите в классе функцию __wakeup().
Что не так с базой данных
Типично, что при сохранении в бд текстовых полей (в зависимости от определения полей таблицы), вы теряете фигурные скобки, которые как раз появляются при сериализации массивов и объектов. Подготовьте данные следующим образом:
1 |
$safe_string_to_store = base64_encode(serialize($multidimensional_array)); |
А после извлечения данных из БД восстановить массив нужно так:
1 |
$array_restored_from_db = unserialize(base64_decode($encoded_serialized_string)); |
Это самые типичные проблемы.
А это сработает, если в массиве хранятся строки в UTF-8??
Да хоть бинарный файл :)
А какие ещё известны проблемы с unserialize?
У меня всё равно эта функция возвращает false.