serialize / unserialize în PHP

Variabile PHP 4+

Transformă o valoare PHP (tablou, obiect) într-un text care poate fi salvat și refăcut apoi cu unserialize.

Sintaxă
serialize(mixed $value): string

Ce face serialize / unserialize

serialize păstrează exact tipurile și structura: tablouri, numere, true/false, obiecte. unserialize(string $data, array $options = []) reface valoarea originală din text. WordPress folosește acest format pentru multe opțiuni din baza de date.

Pentru date schimbate cu alte aplicații sau cu JavaScript, json_encode este de obicei o alegere mai bună: este mai ușor de citit și nu poate crea obiecte PHP.

Parametri

Parametru Descriere
$value Valoarea transformată în text. Resursele și funcțiile anonime nu pot fi serializate.

Ce returnează

Textul serializat. unserialize returnează valoarea refăcută sau false dacă textul este invalid.

Exemple

Exemplul 1: Dus și întors

<?php
$cos = ["Mouse" => 2, "Cablu" => 1];

$text = serialize($cos);
echo $text . "\n";

print_r(unserialize($text));

Rezultat

a:2:{s:5:"Mouse";i:2;s:5:"Cablu";i:1;}
Array
(
    [Mouse] => 2
    [Cablu] => 1
)

Exemplul 2: Formatul păstrează tipurile

Literele indică tipul: i întreg, d float, b boolean, N null, s:5 text de 5 octeți (litera ș ocupă 2 octeți).

<?php
echo serialize([42, 3.5, true, null, "Iași"]);

Rezultat

a:5:{i:0;i:42;i:1;d:3.5;i:2;b:1;i:3;N;i:4;s:5:"Iași";}

Exemplul 3: Fără obiecte, pentru date nesigure

Cu allowed_classes => false, obiectul nu este refăcut ca Utilizator, ci ca o clasă specială, fără metode.

<?php
class Utilizator { public $nume = "Ana"; }
$text = serialize(new Utilizator());

$sigur = unserialize($text, ["allowed_classes" => false]);
echo get_class($sigur);

Rezultat

__PHP_Incomplete_Class

Greșeli frecvente

  • Faci unserialize pe date primite de la utilizatori (cookie-uri, formulare). Un atacator poate crea obiecte care rulează cod pe server. Folosește json_decode sau opțiunea allowed_classes => false.
  • Modifici manual un text serializat (de exemplu cu căutare și înlocuire în baza de date WordPress). Lungimile s:4 nu se mai potrivesc și unserialize eșuează.

Comenzi înrudite

  • json_encode: Transformă un tablou sau obiect PHP în text JSON.
  • json_decode: Transformă un text JSON în tablou sau obiect PHP.
  • var_export: Afișează o variabilă ca cod PHP valid, pe care îl poți copia înapoi într-un script.