Start · Sprachen · PHP · Referenz · igbinary_unserialize

igbinary_unserialize

Funktion

Wandelt eine mit <code>igbinary_serialize()</code> erzeugte binäre Darstellung zurück in einen PHP-Wert.

Kategorie: misc

Signatur

igbinary_unserialize(string $str): mixed

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

Typ
mixed
Beschreibung
Gibt den rekonstruierten PHP-Wert zurück – das kann ein Skalar, ein Array, ein Objekt oder 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);
array(4) { ["name"]=> string(5) "Maria" ["alter"]=> int(30) ["aktiv"]=> bool(true) ["tags"]=> array(2) { [0]=> string(3) "php" [1]=> string(8) "igbinary" } }

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;
Objekt wiederhergestellt: Klaus Klaus / klaus@example.com

// 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).