
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.
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.
Serialize vs. Unserialize: zwei Tools, ein WordPress-Dump
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.
a:…, s:…, i:…, d:…, b:…, N; einfügenarray(…) / => — siehe PHP online serialisierenCore 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-Einstellungenwp_postmeta.meta_value — Anhangsgrößen, Custom Fields, Page Builderwp_usermeta / wp_commentmeta — dasselbe Muster, pro User oder Kommentar_transient_*) packen oft ein Array plus TimeoutO: plus Klassenname, lehnt FastMinify ab — Plugin-Objekt, kein ArrayIn 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“.
unserialize($s, ['allowed_classes' => false]) (PHP 7+)eval oder wp-cli eval auf einem Blob aus einem TicketWas der Parser akzeptiert — und wie WordPress-Zeilen aussehen
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
Nachher
a:N:{…} — Array mit N Schlüssel/Wert-Paaren (assoziativ oder indiziert)s:n:"…" — String; n ist die Bytelänge, nicht die UTF-8-Zeichenzahli: Integer, d: Float, b:0/b:1 Bool, N; nullO:8:"stdClass" und R: / r: — hier nicht dekodierts:3:"hello") scheitern, statt den Rest des Arrays zu korrumpierenAnhangs-Metadaten und viele ACF-artige Felder sind Arrays aus Integern und Strings — genau die Teilmenge dieses Parsers. Zelle einfügen, unserialize, JSON kopieren.
Vorher
Nachher
wp option get … --format=json unserialisiert bereits in PHP — FastMinify, wenn nur der SQL-Dump da istPHP-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.
Cache::put eines flachen Arrays: meist a: — einfügen und dekodierenO: — in PHP mit Allow-List dekodieren, nicht hierencrypt()-Payloads sind kein serialize() — zuerst in der App entschlüsselnO:, kein R:, keine ObjektausführungIm Browser unserialisieren: eine konkrete WordPress-Schleife
Ö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.
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.
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.
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.
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.
Redis zeigt einen Wert, der mit a: beginnt. Sie wollen wissen, welche Config-Keys in der Nutzlast stecken, bevor Sie den Key flushen.
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.
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).
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)
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
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
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
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.
Verwandte Artikel

Stages, Includes, `rules:`: Struktur einer .gitlab-ci.yml prüfen, bevor die Pipeline läuft — kein GitLab-Runner, kein offizielles CI Lint.

Kaputtes YAML, fehlendes `on` oder `jobs`, leere Steps: Workflow-Struktur vor dem Push prüfen — actionlint bleibt in der CI.

SDL-Syntaxfehler, Schema-Review und Formatierung vor dem Merge — ergänzt den bestehenden GraphQL-Beautifier.