(PHP 4, PHP 5, PHP 7)
unserialize — Creează o valoare PHP dintr-o reprezentare stocată
unserialize() preia o singură variabilă serializată și o convertește invers într-o valoare PHP.
Nu transmiteți date ale utilizatorilor, de care nu sunteți sigur, funcției unserialize(). Deserializarea poate rezulta în încărcarea și executarea codului datorită instanțierii și autoîncărcării obiectelor, și un utilizator rău-intenționat poate să exploateze această posibilitate. Utilizați un format securizat, standard de schimb de date, cum ar fi JSON (cu ajutorul json_decode() și json_encode()) dacă aveți nevoie să transmiteți date serializate utilizatorului.
Dacă aveți nevoie să deserializați date serializate stocate extern, considerați utilizarea hash_hmac() pentru validarea datelor. Asigurați-vă că datele nu au fost modificate de altcineva.
str
String-ul serializat.
Dacă variabila ce se deserializează este un obiect, după ce se reconstituie cu succes, PHP automat va încerca să apeleze funcția-membru __wakeup() (dacă aceasta există).
Notă: directiva unserialize_callback_func
Este posibil de a stabili o funcție de apel invers ce se va apela când o clasă nedefinită trebuie instanțiată în timpul deserializării. (pentru a preveni obținerea unui object incomplet "__PHP_Incomplete_Class".) Utilizați php.ini, ini_set() sau .htaccess pentru a defini 'unserialize_callback_func'. De fiecare dată când o clasă nedefinită va trebui instanțiată, această funcție va fi apelată. Pentru a dezactiva această facilitate lăsați această opțiune vidă.
options
Orice opțiuni ce trebuie transmise unserialize(), ca tablou asociativ.
Nume | Tip | Descriere |
---|---|---|
allowed_classes | mixed |
Poate fi un array cu denumiri de clase, ce trebuie să
fie acceptate, FALSE pentru a nu accepta clase sau TRUE pentru a
accepta toate clasele. Dacă această opțiune e definită și
unserialize() întâlnește un obiect al unei clase
ce nu trebuie acceptată, atunci obiectul va fi instanțiat ca
__PHP_Incomplete_Class.
Omiterea acestei opțiuni are același efect ca și definirea sa în
TRUE : PHP va încerca să instanțieze obiecte de orice clasă.
|
Valoarea convertită este întoarsă, și poate fi de tip boolean, integer, float, string, array sau object.
În caz că string-ul furnizat nu poate fi deserializat se va întoarce FALSE
și se va emite o eroare E_NOTICE
.
Versiune | Descriere |
---|---|
7.0.0 |
Parametrul options a fost adăugat.
|
5.6.0 | Manipularea datelor serialiate prin înlocuirea C: cu O: pentru a forța instanțierea obiectului fără a apela constructorul acum va eșua. |
Example #1 Exemplu unserialize()
<?php
// Aici vom utiliza unserialize() pentru a încărca datele sesiunii în tabloul
// $session_data din string-ul selectat dintr-o bază de date.
// Acest exemplu îl complementează pe cel descris în funcția 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)) {
// dacă execute sau fetch eșuează, se inițializează un tablou vid
$session_data = array();
} else {
// acum trebuie să avem datele serializate în $tmp[0].
$session_data = unserialize($tmp[0]);
if (!is_array($session_data)) {
// ceva nu este în regulă, inițializează într-un tablou vid
$session_data = array();
}
}
?>
Example #2 Exemplu unserialize_callback_func
<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
// directiva unserialize_callback_func este disponibilă începând cu PHP 4.2.0
ini_set('unserialize_callback_func', 'mycallback'); // stabilește funcția de apel invers
function mycallback($classname)
{
// doar includeți un fișier ce conține definiția clasei
// veți lăsa ca $classname să-și dea seama care definiție a clasei este necesară
}
?>
FALSE
este întors atât în cazul unei erori, cât și în cazul deserializării
unei valori FALSE
serializate. Este posibil de a intercepta acest caz
special comparând str
cu
serialize(false) sau interceptând eroarea
E_NOTICE
emisă.