Signatur
Beschreibung
igbinary_unserialize() ist das Gegenstück zu igbinary_serialize() und rekonstruiert aus einer kompakten Binär-Darstellung den ursprünglichen PHP-Wert – also Skalare, Arrays, Objekte oder null. Die Funktion ist Teil der igbinary-PECL-Erweiterung, die als performantere und speichersparsamere Alternative zum eingebauten serialize()/unserialize()-Mechanismus entwickelt wurde.
Typische Einsatzgebiete sind Session-Handling (via session.serialize_handler = igbinary), Caching-Backends wie Redis oder Memcached sowie jede Situation, in der PHP-Daten kompakt persistent gespeichert oder über Netzwerke übertragen werden sollen. Das igbinary-Format ist binär und nicht menschenlesbar, dafür aber deutlich kleiner und schneller als das textbasierte PHP-Serialisierungsformat.
Beim Deserialisieren von Objekten ruft PHP – sofern die Klasse existiert und die Methode implementiert – __wakeup() bzw. __unserialize() auf, genau wie beim nativen unserialize(). Fehlt die Klasse eines serialisierten Objekts, wird ein Objekt der Klasse __PHP_Incomplete_Class zurückgegeben.
Die Funktion setzt voraus, dass der übergebene String tatsächlich von igbinary_serialize() erzeugt wurde. Ungültige oder beschädigte Eingaben führen zu einem Fehler oder zum Rückgabewert false.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $str Pflicht | string | Der mit igbinary_serialize() erzeugte binäre String, der deserialisiert werden soll. |
Rückgabewert
null sein. Bei einem ungültigen oder nicht deserialisierbaren Eingabe-String wird false zurückgegeben und ein E_NOTICE ausgelöst.Beispiele
Einfaches Serialisieren und Deserialisieren eines Arrays
<?php
// Voraussetzung: igbinary-Erweiterung ist installiert und geladen
$daten = [
'name' => 'Maria',
'alter' => 30,
'aktiv' => true,
'tags' => ['php', 'igbinary'],
];
$binaer = igbinary_serialize($daten);
// Binären String speichern (z. B. Redis, Datei) und später wiederherstellen
$wiederhergestellt = igbinary_unserialize($binaer);
var_dump($wiederhergestellt);
Objekte serialisieren und mit __wakeup wiederherstellen
<?php
class Benutzer {
public string $name;
public string $email;
private ?\PDO $dbVerbindung = null;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
public function __sleep(): array {
// PDO-Verbindung wird nicht serialisiert
return ['name', 'email'];
}
public function __wakeup(): void {
// Verbindung nach dem Deserialisieren neu aufbauen
echo "Objekt wiederhergestellt: {$this->name}\n";
}
}
$benutzer = new Benutzer('Klaus', 'klaus@example.com');
$binaer = igbinary_serialize($benutzer);
$klon = igbinary_unserialize($binaer);
echo $klon->name . ' / ' . $klon->email . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Wie das native unserialize() sollte igbinary_unserialize() niemals auf nicht vertrauenswürdige Benutzereingaben angewendet werden. Das Deserialisieren von Fremddaten kann über sogenannte PHP Object Injection-Angriffe zur Codeausführung führen, wenn sich geeignete Klassen mit __destruct()- oder __wakeup()-Methoden im Scope befinden. Daten aus externen Quellen (GET, POST, Cookies, externe APIs) müssen grundsätzlich als unsicher betrachtet werden.
Der igbinary-Binärstring ist nicht kompatibel mit dem Ausgabeformat von PHP-eigenem serialize(). Beide Formate lassen sich nicht gegenseitig lesen.
Damit igbinary_unserialize() verfügbar ist, muss die PECL-Erweiterung igbinary installiert und in der php.ini geladen sein (extension=igbinary.so bzw. extension=igbinary.dll).