(PHP 4, PHP 5)
unserialize — Създава PHP стойност от подходящо за съхранение представяне на стойност
Функция unserialize() взема дадена сериализирана променлива и превръща стойността й отново в PHP стойност.
Сериализираният низ.
Ако променливата, която се десериализира е от тип обект, след успешно преобразуване на обекта, PHP автоматично ще направи опит да извика метода __wakeup() (ако съществува).
Забележка: директивата unserialize_callback_func
Възможно е да зададете обратно-извикваща функция, която да се извика, ако трябва да се създаде инстанция за недефиниран клас по време на десериализирането. (предпазва от връщане на непълен обект "__PHP_Incomplete_Class".) Използвайте php.ini, ini_set() или .htaccess, за да дефинирате 'unserialize_callback_func'. Всеки път, когато трябва да се създаде инстанция на недефиниран клас, тя ще бъде извикана. За да забраните тази възможност, просто установете тази настройка на празен низ.
Преобразуваната стойност се връща и може да бъде от тип boolean, integer, float, string, array или object.
В случай че подаденият низ не може да се десериализира, функцията връща FALSE и генерира E_NOTICE.
Версия | Описание |
---|---|
4.2.0 | Възможно е използването на директивата unserialize_callback_func. |
4.0.0 | При сериализиране на обект, методите вече не се губят. Моля прегледайте Сериализиране на обекти - обекти в сесии за повече информация. |
Example #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();
}
}
?>
Example #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.