unserialize

(PHP 4, PHP 5, PHP 7)

unserialize Creează o valoare PHP dintr-o reprezentare stocată

Descrierea

unserialize ( string $str [, array $options ] ) : mixed

unserialize() preia o singură variabilă serializată și o convertește invers într-o valoare PHP.

Avertizare

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.

Parametri

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.

Opțiuni valide
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ă.

Valorile întoarse

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.

Istoricul schimbărilor

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.

Exemple

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ă
}
?>

Note

Avertizare

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ă.

A se vedea și