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_classes | mixed | Або масив імен класів, які мають бути прийняті, false для вказівки не приймати жодних класів, або true , щоб приймати все. Якщо ця опція задана та функція unserialize() виявить об'єкт неприйнятного класу, то він не буде прийнятий, а натомість інстанцується як об'єкт класу __PHP_Incomplete_Class. . Якщо опція не задана, вважатиметься, що їй встановлено значення true : PHP спробує інстанцувати об'єкти будь-якого класу |
max_depth | int | Максимальна глибина структур, дозволена при десеріалізації та призначена для запобігання переповненню стека. За умовчанням обмеження глибини становить 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
Дивіться також
- json_encode() - Повертає JSON-подання даних
- json_decode() - Декодує рядок JSON
- hash_hmac() - Генерація хеш-коду на основі ключа, використовуючи метод HMAC
- serialize() - Генерує придатне для зберігання уявлення змінної
- Автоматичне завантаження класів
- unserialize_callback_func
- unserialize_max_depth
- __wakeup()
- __serialize()
- __unserialize()