(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(), indiferent dacă valoarea parametrului
options
este allowed_classes
.
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 una din metodele __unserialize() sau __wakeup() (dacă acestea 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.1.0 |
Elementul allowed_classes al parametrului
options ) este acum strict tipizat, adică dacă e
transmis orice în afară de array sau boolean,
unserialize() va întoarce false și va emite un
E_WARNING .
|
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";}';
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ă.