unserialize - Создает PHP-значение из хранимого представления
Вернуться к: Функции для работы с переменными
unserialize
(PHP 4, PHP 5, PHP 7)
unserialize — Создает PHP-значение из хранимого представления
Описание
unserialize() принимает одну сериализованную переменную и конвертирует ее обратно в значение PHP.
Список параметров
-
str
-
Сериализованная строка.
Если переменная, требующая десериализации, является объектом, то после успешного восстановления объекта PHP автоматически попытается вызвать магический метод __wakeup() (если он существует).
Замечание: Директива unserialize_callback_func
Существует возможность указать функцию обратного вызова, которая будет вызвана, если в процессе десериализации должен быть проинициализирован неопределенный класс. (для предотвращения получения неполного объекта object "__PHP_Incomplete_Class".) Используйте php.ini, ini_set() или .htaccess для определения функции 'unserialize_callback_func'. Данная функция будет вызываться каждый раз, когда должен быть проинициализирован неопределенный класс. Для отключения этой возможности просто оставьте значение директивы пустым.
Возвращаемые значения
Возвращается преобразованное значение, которое принимать один из типов boolean, integer, float, string, array или object.
В случае, если переданная строка не поддается десериализации, возвращается FALSE
и
генерируется E_NOTICE
.
Список изменений
Версия | Описание |
---|---|
5.6.0 | Изменение сериализованных данных с заменой C: на O:, для принудительного создания объекта без вызова конструктора, теперь будет проходить успешно. |
Примеры
Пример #1 Пример использования unserialize()
<?php
// Мы используем функцию unserialize() для загрузки сессионных данных в массив
// $session_data из строки, извлекаемой из базы данных.
// Данный пример дополняет пример, описывающий использование serialize().
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {
// если процедура извлечения данных не удалась, то инициализируем пустой массив
$session_data = array();
} else {
// сейчас у нас должны быть сериализованные данные в $tmp[0].
$session_data = unserialize($tmp[0]);
if (!is_array($session_data)) {
// что-то пошло не так, инициализируем пустой массив
$session_data = array();
}
}
?>
Пример #2 Пример использования unserialize_callback_func
<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
// директива unserialize_callback_func доступна с PHP 4.2.0
ini_set('unserialize_callback_func', 'mycallback'); // определяем свою функцию обратного вызова
function mycallback($classname)
{
// просто подключаете файл, содержащий определение класса
// $classname указывает, для какого класса требуется определение
}
?>
Примечания
FALSE
возвращается как в случае ошибки, так и в случае, если десериализуется
сериализованное значение FALSE
. Этот особый случай можно отловить, используя
сравнение str
со значением
serialize(false), или перехватив сгенерированную ошибку
E_NOTICE
.
Не передавайте непроверенные пользовательские данные в unserialize(). Десериализация может создать код, который выполнится при создании объекта или при автоматической загрузке кода, чем могут воспользоваться недобросовестные пользователи. Лучше использовать более безопасные стандартные форматы обмена данными, такие как JSON (с помощью функций json_decode() и json_encode()), если вам нужно передать сериализованные данные пользователю.
Смотрите также
- serialize() - Генерирует пригодное для хранения представление переменной
- Автозагрузка объектов
- unserialize_callback_func
- __wakeup()
Вернуться к: Функции для работы с переменными