unserialize

(PHP 4, PHP 5, PHP 7, PHP 8)

unserialize — Створює PHP-значення зі збереженого уявлення

Опис

unserialize(string $data, array $options = []): mixed

Функцияunserialize() приймає одну серіалізовану змінну та конвертує її назад у значення PHP.

Увага

Не рекомендовано передавати ненадійні дані користувача в функцію unserialize(), навіть якщо параметр optionsзадано значениеallowed_classes. Десеріалізація вміє створити код, який виконається при інстанціюванні об'єкта або автоматичному завантаженні коду, що можуть використовувати несумлінні користувачі. Краще викликати більш безпечні стандартні формати обміну даними, наприклад, JSON (функціями json_decode() і json_encode()), якщо потрібно передати серіалізовані дані користувачеві.

Коли потрібно десеріалізувати дані із зовнішніх джерел, користуються функцією hash_hmac(), щоб перевірити ці дані. Перевіряють, щоб дані були змінені ніким, крім розробника.

Список параметрів

data

Серіалізований рядок.

Якщо змінна об'єкт, що вимагає десеріалізації, то після успішного відновлення об'єкта PHP автоматично спробує викликати магічні методи. __unserialize() або __wakeup() (якщо визначено).

Зауваження Директива unserialize_callback_func

Дозволено встановлювати callback-функцію, яка буде викликана, якщо при десеріалізації потрібно проініціалізувати невизначений клас (щоб унеможливити отримання неповного об'єкта (object) «__PHP_Incomplete_Class»). Щоб визначити функцію для директиви unserialize_callback_func, користуються файлом php.ini, функцією ini_set() або файлом .htaccess. Функція буде викликатися щоразу, коли має бути проініціалізований невизначений клас. Для відключення цієї поведінки значення директиви залишають порожнім.

options

Будь-які опції у вигляді асоціативного масиву, які можна передавати в функцію unserialize()

Коректні опції

ИмяТипОпис
allowed_classesmixedАбо масив імен класів, які мають бути прийняті, false для вказівки не приймати жодних класів, або true, щоб приймати все. Якщо ця опція задана та функція unserialize() виявить об'єкт неприйнятного класу, то він не буде прийнятий, а натомість інстанцується як об'єкт класу __PHP_Incomplete_Class. . Якщо опція не задана, вважатиметься, що їй встановлено значення true: PHP спробує інстанцувати об'єкти будь-якого класу
max_depthintМаксимальна глибина структур, дозволена при десеріалізації та призначена для запобігання переповненню стека. За умовчанням обмеження глибини становить 4096 та вимикається встановленням опції max_depthзначення

Значення, що повертаються

Повертає перетворене значення, яке набуває одного з типів bool, int, float, string, array або object.

Якщо переданий рядок не піддається десеріалізації, повертає false та видає помилку рівня E_WARNING

Помилки

Об'єктам дозволено викидати винятки Throwable у своїх оброблювачах десеріалізації.

список змін

ВерсияОпис
8.3.0Тепер видає помилку рівня E_WARNING, якщо переданий рядок несеріалізується; раніше видавалася помилка рівня E_NOTICE
7.4.0Доданий елемент max_depthв параметрoptions для встановлення максимальної глибини структур, дозволених під час десеріалізації.
7.1.0Тепер елемент allowed_classesпараметраoptions строго типізований, тобто якщо що-небудь передано, крім array і bool, unserialize() поверне false та викличе помилку E_WARNING

Приклади

Приклад #1 Приклад використання функції unserialize()****

Loading...

Приклад #2 Приклад використання директиви unserialize_callback_func

Loading...

Примітки

Увага

Значение**false** повертається як у разі помилки, так і при десеріалізації серіалізованого значення false. Цей особливий випадок можна відловити, порівнявши значення параметра data зі значенням, яке повертає виклик serialize(false), або перехопивши видану помилку рівня E_NOTICE

Дивіться також