PHP Unserialize: WordPress-Optionen und serialisierte Daten dekodieren

PHP Unserialize: WordPress-Optionen und serialisierte Daten dekodieren

`wp_postmeta`, PHP-Sessions und Laravel-Caches: per Unserialize zu lesbarem JSON — nur Arrays und Skalare, kein lokales Skript.

31.08.2026
10 Min. Lektüre
Teilen Sie diesen Artikel:
PHP
Unserialisieren
WordPress
Debuggen
Serialisierung
Anleitung

Warum serialisiertes PHP dekodieren statt a:3:{…} anstarren?

Ein WordPress-option_value, ein wp_postmeta.meta_value, ein PHP-Session-Blob oder ein Laravel-Cache-Dump landet oft als a:3:{s:8:"blogname";…} im Editor. Das ist PHP serialize() — kein JSON, kein minifiziertes Bundle. Der online PHP-Unserializer macht aus Array- und Skalar-Tokens lesbares JSON (oder PHP-Array-Syntax) im Browser. Er führt kein PHP aus, instanziiert keine Klassenobjekte und lädt die Nutzlast nicht hoch. Dieser Artikel ist der Debug-Workflow: wo diese Blobs liegen, wie man sie sicher einfügt, und wann natives PHP nötig bleibt. Für das Drahtformat, JSON vs. serialize und Object Injection zuerst den PHP-Serialisierungsleitfaden. Frontend-Assets derselben WordPress-Site sind ein anderes Thema — siehe WordPress-Minifizierung.

wp_options, Postmeta und Transients ohne lokales PHP-Skript prüfen
JSON- oder PHP-Array-Ausgabe, Standard-Einzug 2 Leerzeichen — nichts verlässt den Tab
Ehrlicher Parser: nur Arrays und Skalare — O:-Objekte und R:-Referenzen werden abgelehnt
Sicherer als PHP unserialize() auf einem unbekannten Dump: keine Objektausführung
Array-Roundtrip über php-serialize nach dem Bearbeiten des lesbaren JSON

Serialize vs. Unserialize: zwei Tools, ein WordPress-Dump

serialize() schreibt; unserialize() liest — FastMinify trennt die Seiten

PHP serialize() erzeugt eine typisierte Zeichenkette. unserialize() stellt den Wert wieder her. FastMinify spiegelt diese Trennung: php-serialize kodiert JSON oder PHP-Array-Syntax in a:/s:/i:-Tokens; php-unserialize dekodiert sie. Keinen serialisierten Blob in den Serializer kleben, kein JSON in den Unserializer. Benachbarte Utilities liegen im Hub Entwickler-Utilities.

Unserialize-Seite: a:…, s:…, i:…, d:…, b:…, N; einfügen
Serialize-Seite: JSON oder array(…) / => — siehe PHP online serialisieren
Ausgabeformat Unserialize: JSON (Standard) oder PHP-Array-Syntax
Pretty-JSON zum Lesen; kompaktes JSON danach mit dem online JSON-Minifizierer
Eine minifizierte JS-Datei eines Plugins ist kein serialize(): nutzen Sie einen online JavaScript-Unminifier
Wo WordPress serialize() wirklich speichert

Core und viele Plugins rufen maybe_serialize() / maybe_unserialize() auf. Ist der Wert ein PHP-Array (oder ein Objekt), landet er als serialize()-String in MySQL. Skalare (plain Strings, Zahlen) bleiben unverändert — nicht jede Zeile hat ein a:-Präfix.

wp_options.option_value — Sitename, Permalink-Struktur, Widget-Instanzen, Plugin-Einstellungen
wp_postmeta.meta_value — Anhangsgrößen, Custom Fields, Page Builder
wp_usermeta / wp_commentmeta — dasselbe Muster, pro User oder Kommentar
Transients (_transient_*) packen oft ein Array plus Timeout
Beginnt die Zelle mit O: plus Klassenname, lehnt FastMinify ab — Plugin-Objekt, kein Array
PHP unserialize() ist eine Sicherheitsgrenze; das Browser-Tool ist kein PHP

In PHP kann unserialize() auf unsicherem Input Objekte instanziieren und Gadget-Chains auslösen (Object Injection). FastMinify parst das Format in JavaScript. Es führt nie PHP aus und dekodiert keine O:-Klassenobjekte und keine R:-Referenzen. Das ist eine Grenze und eine Sicherheitseigenschaft. Nutzen Sie es zum Prüfen von Array-Dumps. Ein erfolgreiches Dekodieren heißt nicht „dieser Payload ist in Produktion sicher zu unserialize“.

Unbekannter Dump: zuerst im Browser prüfen — kein Upload, kein PHP-Prozess
Falls PHP nötig: unserialize($s, ['allowed_classes' => false]) (PHP 7+)
Nie eval oder wp-cli eval auf einem Blob aus einem Ticket
Options-Dumps können API-Keys enthalten — ein lokaler Tab ist sicherer als ein Online-Unserializer, der auf einen Server postet
Theorie und Mitigation: Serialisierungsleitfaden, Sicherheit

Was der Parser akzeptiert — und wie WordPress-Zeilen aussehen

Typ-Präfixe in einem typischen option_value

Jedes Token beginnt mit einem Buchstaben. Der FastMinify-Unserializer akzeptiert dieselbe Teilmenge, die er serialisieren kann: null, bool, int, float, String, verschachteltes Array. Objekte und Referenzen sind Fehler, keine stillen Überspringungen.

Vorher

a:3:{s:8:"blogname";s:10:"FastMinify";s:11:"description";s:22:"Local developer tools.";s:7:"WPLANG";s:5:"en_US";}

Nachher

{ "blogname": "FastMinify", "description": "Local developer tools.", "WPLANG": "en_US" }
a:N:{…} — Array mit N Schlüssel/Wert-Paaren (assoziativ oder indiziert)
s:n:"…" — String; n ist die Bytelänge, nicht die UTF-8-Zeichenzahl
i: Integer, d: Float, b:0/b:1 Bool, N; null
O:8:"stdClass" und R: / r: — hier nicht dekodiert
Kaputte Längenpräfixe (s:3:"hello") scheitern, statt den Rest des Arrays zu korrumpieren
wp_postmeta: ein verschachteltes Array, das man lesen kann

Anhangs-Metadaten und viele ACF-artige Felder sind Arrays aus Integern und Strings — genau die Teilmenge dieses Parsers. Zelle einfügen, unserialize, JSON kopieren.

Vorher

a:2:{s:5:"width";i:1200;s:6:"height";i:630;}

Nachher

{ "width": 1200, "height": 630 }
phpMyAdmin / TablePlus: die rohe Zelle kopieren, nicht die gekürzte Vorschau
WP-CLI wp option get … --format=json unserialisiert bereits in PHP — FastMinify, wenn nur der SQL-Dump da ist
Nach dem Dekodieren, Toolbar: JSON (Standard) vs. PHP-Array-Syntax; Einzug 2; Leerzeichen oder Tabs
Optionale Filter: Nulls, leere Arrays, leere Objekte entfernen oder Keys sortieren — sie ändern die Nutzlast, für eine treue Prüfung auslassen
Kompaktes JSON für ein Ticket: online JSON-Minifizierer auf der kopierten Ausgabe
Sessions, Laravel-Caches und die O:-Wand

PHP-Session-Dateien und manche Laravel-Cache-Treiber speichern serialize()-Nutzlasten. Ist der Wert ein Array aus Skalaren, funktioniert das Browser-Tool. Ist es ein Eloquent-Modell, eine Carbon-Instanz oder irgendeine O:-Klasse, liefert FastMinify einen klaren Fehler. Das ist erwartet — das Produkt gibt nicht vor, PHP-unserialize zu sein.

Laravel Cache::put eines flachen Arrays: meist a: — einfügen und dekodieren
Laravel Eloquent / eigene DTOs: O: — in PHP mit Allow-List dekodieren, nicht hier
Verschlüsselte Cookies und encrypt()-Payloads sind kein serialize() — zuerst in der App entschlüsseln
igbinary- oder JSON-Cache-Stores sind kein PHP-serialize() — den Treiber prüfen, bevor Sie einfügen
Dieselbe Ehrlichkeit wie die Tool-Docs: kein O:, kein R:, keine Objektausführung

Im Browser unserialisieren: eine konkrete WordPress-Schleife

Den PHP-Unserializer nutzen

Öffnen Sie den PHP-Unserializer, fügen Sie einen einzelnen serialisierten String ein, klicken Sie Unserialize. Ausgabe ist standardmäßig JSON (Einzug 2, Leerzeichen). Wechseln Sie zu PHP-Array-Syntax, wenn Sie in ein Snippet zurückkopieren. Alles bleibt im Tab — kein Konto, kein Server-Roundtrip.

Akzeptierte Tokens: N;, b:, i:, d:, s:, verschachtelte a:-Arrays
Abgelehnt: O:-Klassenobjekte, R:/r:-Referenzen, gekürzte oder ungültige Längenpräfixe
Optionen: Ausgabe JSON vs. PHP-Array; Nulls einschließen (standard an); leere Arrays/Objekte entfernen; Keys sortieren; Einzugsgröße und Leerzeichen vs. Tab
Kein WordPress-SQL-Migrationswerkzeug: kein manuelles Find-Replace von s:n:"…" in einem Dump
Szenario — Widget-Instanz in wp_options

Ein Sidebar-Widget ist nach einer Migration leer. Die Option widget_* ist ein serialisiertes Array. Sie müssen sehen, welche Keys überlebt haben — nicht aus einer 400-Zeichen-Zelle raten.

1

Schritt 1: den rohen option_value kopieren

Aus SQL oder WP-CLI den kompletten String ab a: kopieren. Gekürzte Vorschauen mit scheitern am Parse.

2

Schritt 2: in php-unserialize einfügen

Öffnen Sie php-unserialize. Ausgabe auf JSON lassen. Fehler zu unbekanntem Format bei O:: das Widget hat ein Objekt gespeichert — hier stoppen und PHP mit allowed_classes nutzen.

3

Schritt 3: JSON bearbeiten, nur bei Bedarf neu serialisieren

Keys im JSON korrigieren. Wieder kodieren mit php-serialize. Dieser Roundtrip gilt für Arrays/Skalare, die dieser Parser unterstützt — er ist nicht byte-identisch zum originalen WordPress-String (Key-Reihenfolge, Leerzeichen). Wenn möglich WP-CLI wp option update mit JSON bevorzugen.

Szenario — Laravel-Cache-Dump in Redis

Redis zeigt einen Wert, der mit a: beginnt. Sie wollen wissen, welche Config-Keys in der Nutzlast stecken, bevor Sie den Key flushen.

1

Schritt 1: Nutzlast ohne Redis-Längenpräfix kopieren

Wenn der Treiber serialize() in ein Laravel-Präfix packt, das Anwendungspräfix bis zum ersten a: oder s: entfernen.

2

Schritt 2: lokal dekodieren

In den Unserializer einfügen. Verschachtelte Arrays werden JSON-Objekte oder -Arrays. Nulls bleiben, wenn „Nullwerte einschließen“ an ist (Standard).

3

Schritt 3: O:-Nutzlasten PHP überlassen

Ein Illuminate\…-Klassentoken erzeugt einen Fehler. Das ist das Tool wie dokumentiert — kein kaputter Redis-Dump.

Wann Sie weiterhin PHP brauchen (und wie der Array-Roundtrip läuft)

allowed_classes => false — Prüfung auf der PHP-Seite

Enthält der Blob Objekte, oder sind Sie in einem Deploy-Skript, dekodieren Sie in PHP ohne Klassen zu instanziieren. Incomplete-Class-Objekte nennen die Klasse, ohne Konstruktoren auszuführen. FastMinify ersetzt dieses Tor nicht.

Einfaches Beispiel

<?php // Untrusted serialize()-Dump prüfen, ohne Klassen zu instanziieren (PHP 7+). $raw = file_get_contents('option_value.txt'); $value = unserialize($raw, ['allowed_classes' => false]); var_export($value);
WordPress: maybe_unserialize und WP-CLI

Core kennt das Format bereits. maybe_unserialize() liefert Arrays als Arrays. WP-CLI gibt JSON aus, damit Sie Längenpräfixe nie von Hand editieren. FastMinify, wenn Sie nur einen SQL-Export oder ein Ticket-Paste haben — zurückschreiben über WP-APIs, nicht per rohem UPDATE eines getweakten serialize()-Strings.

Einfaches Beispiel

# Option als JSON lesen (WordPress unserialisiert in PHP). wp option get widget_text --format=json # Aus einer JSON-Datei aktualisieren statt s:n:\"…\" in SQL zu patchen. wp option update my_plugin_settings "$(cat settings.json)" --format=json
Roundtrip im Browser — nur Arrays

Dekodieren mit php-unserialize, JSON bearbeiten, kodieren mit php-serialize. Verschachtelte JSON-Objekte werden PHP-Arrays, keine O:-Objekte. Keys sortieren oder Nulls/leere Strukturen entfernen ändert, was Sie zurückschreiben. Die On-Page-Docs sagen es klar: das ist kein byte-genaues WordPress-SQL-Migrationswerkzeug. Für CSS/JS derselben Site bleibt der WordPress-Minifizierungsleitfaden — andere Pipeline.

Einfaches Beispiel

// Browser-Schleife (nur Arrays/Skalare): // 1. serialize()-String einfügen → php-unserialize → JSON // 2. JSON bearbeiten // 3. JSON einfügen → php-serialize → neuer a:…-String // Kein UPDATE von wp_options mit handeditiertem s:n:"…"-Präfix.

Fazit

serialize()-String einfügen, JSON lesen, entscheiden ob die Nutzlast ein Array für den Roundtrip ist oder ein Objekt, das zu PHP gehört. FastMinify prüft lokal und lehnt O:/R: ab. Es ist nicht unserialize(), nicht WP-CLI und kein sicheres Find-Replace auf MySQL-Dumps. Für das Format im Detail den PHP-Serialisierungsleitfaden neben diesem Workflow behalten.

Die ganze Zelle kopieren — gekürzte a:-Strings scheitern am Parse
O:-Nutzlasten PHP mit allowed_classes => false überlassen
s:n:"…"-Längenpräfixe in SQL nicht von Hand editieren
Nur Arrays roundtrippen: unserialize → JSON → serialize
Dumps im Browser lassen; option_value kann Secrets enthalten
Teilen Sie diesen Artikel
Teilen Sie diesen Artikel: