
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.
Serialisiertes PHP dekodieren, statt rohe Tokens zu lesen
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. Dieser String ist die Ausgabe von PHP serialize(). Er ist weder JSON noch ein minifiziertes Bundle. Der online PHP-Unserializer macht aus Array- und Skalar-Tokens lesbares JSON (oder PHP-Array-Syntax), direkt im Browser. Er führt kein PHP aus, erzeugt keine Klassenobjekte und lädt die Nutzlast nicht hoch. Dieser Artikel zeigt den Debug-Ablauf: wo diese Blobs liegen, wie Sie sie sicher einfügen und wann Sie noch natives PHP brauchen. Für das Serialisierungsformat, den Vergleich mit JSON und Object Injection beginnen Sie mit dem PHP-Serialisierungsleitfaden. Frontend-Dateien derselben WordPress-Seite sind ein eigenes Thema, das die WordPress-Minifizierung behandelt.
Serialisieren und Unserialisieren, zwei Werkzeuge für einen WordPress-Dump
PHP serialize() erzeugt eine typisierte Zeichenkette, unserialize() stellt den Wert wieder her. FastMinify bildet diese Trennung nach: php-serialize kodiert JSON oder PHP-Array-Syntax in a:/s:/i:-Tokens, php-unserialize dekodiert sie. Fügen Sie keinen serialisierten Blob in den Serializer ein und kein JSON in den Unserializer. Weitere Hilfsprogramme finden Sie im Hub Entwickler-Utilities.
a:…, s:…, i:…, d:…, b:…, N; einfügenarray(…) / => einfügen (siehe PHP online serialisieren)Der Core und viele Plugins rufen maybe_serialize() / maybe_unserialize() auf. Ist der Wert ein PHP-Array (oder ein Objekt), speichert MySQL ihn als serialize()-String. Skalare (einfache Strings, Zahlen) bleiben unverändert, deshalb beginnt nicht jede Zeile mit a:.
wp_options.option_value: Sitename, Permalink-Struktur, Widget-Instanzen, Plugin-Einstellungenwp_postmeta.meta_value: Anhangsgrößen, benutzerdefinierte Felder, Page Builderwp_usermeta / wp_commentmeta: dasselbe Muster, je Benutzer oder Kommentar_transient_*) enthalten oft ein Array, das Ablaufdatum steht in einer eigenen OptionO: und einem Klassennamen, lehnt FastMinify sie ab, denn das ist ein Plugin-Objekt und kein ArrayIn PHP kann unserialize() bei nicht vertrauenswürdigen Eingaben Objekte instanziieren und Gadget-Chains auslösen (Object Injection). FastMinify liest das Format in JavaScript. Es führt nie PHP aus und dekodiert weder O:-Klassenobjekte noch R:-Referenzen. Das ist eine Grenze und eine Sicherheitseigenschaft zugleich. Nutzen Sie das Tool, um Array-Dumps zu prüfen. Ein erfolgreiches Dekodieren bedeutet nicht, dass sich der Payload in Produktion bedenkenlos mit unserialize verarbeiten lässt.
unserialize($s, ['allowed_classes' => false]) (PHP 7+)eval oder wp-cli eval auf einen Blob aus einem Ticket anWas der Parser akzeptiert und wie WordPress-Zeilen aussehen
Jedes Token beginnt mit einem Buchstaben. Der FastMinify-Unserializer akzeptiert dieselbe Teilmenge, die er auch serialisieren kann: null, bool, int, float, String und verschachtelte Arrays. Objekte und Referenzen führen zu einem Fehler und werden nicht stillschweigend übersprungen.
Vorher
Nachher
a:N:{…}: Array mit N Schlüssel-Wert-Paaren (assoziativ oder indiziert)s:n:"…" ist ein String, wobei n die Länge in Bytes angibt und nicht die Zahl der UTF-8-Zeicheni: Integer, d: Float, b:0/b:1 Bool, N; nullO:8:"stdClass" und R: / r: werden hier nicht dekodierts:3:"hello" ohne abschließendes Semikolon schlägt fehl, statt den Rest des Arrays zu verfälschen. Das Tool vergleicht die Zahl nicht mit der Textlänge, prüfen Sie sie bei Bedarf in PHPAnhangs-Metadaten und manche benutzerdefinierten Felder (etwa ACF-Beziehungs- oder Checkbox-Felder) sind Arrays aus Zahlen und Zeichenketten. Das ist genau die Teilmenge, die dieser Parser verarbeitet. Fügen Sie die Zelle ein, klicken Sie auf Deserialisieren und kopieren Sie das JSON.
Vorher
Nachher
wp option get … --format=json deserialisiert bereits in PHP, FastMinify brauchen Sie nur, wenn Ihnen lediglich der SQL-Dump vorliegtPHP-Sessiondateien und manche Laravel-Cache-Treiber speichern serialize()-Nutzlasten. Ist der Wert ein Array aus Skalaren, funktioniert das Tool im Browser. Bei einem Eloquent-Modell, einer Carbon-Instanz oder einer beliebigen O:-Klasse gibt FastMinify eine eindeutige Fehlermeldung aus. Das ist so gewollt, denn das Tool gibt nicht vor, das unserialize von PHP zu sein.
Cache::put mit einem einfachen Array ergibt meist a:, also einfügen und dekodierenO:, dekodieren Sie sie deshalb in PHP mit einer Allowlist und nicht hierencrypt()-Nutzlasten sind kein serialize(), entschlüsseln Sie sie deshalb zuerst in der AnwendungO:, kein R:, keine ObjektausführungIm Browser deserialisieren, am konkreten WordPress-Beispiel
Öffnen Sie den PHP-Unserializer, fügen Sie eine einzelne serialisierte Zeichenkette ein und klicken Sie auf Deserialisieren. Die Ausgabe ist standardmäßig JSON (Einzug 2, Leerzeichen). Wechseln Sie zur PHP-Array-Syntax, wenn Sie das Ergebnis in ein Skript zurückkopieren. Alles bleibt im Tab, ohne Konto und ohne Serveraufruf.
Ein Seitenleisten-Widget ist nach einer Migration leer. Die Option widget_* ist ein serialisiertes Array. Sie müssen sehen, welche Schlüssel erhalten geblieben sind, statt sie aus einer Zelle mit 400 Zeichen zu erraten.
1. Den rohen option_value kopieren
Kopieren Sie aus SQL oder WP-CLI die vollständige Zeichenkette ab a:. Gekürzte Vorschauen mit … lassen sich nicht auslesen.
2. In php-unserialize einfügen
Öffnen Sie php-unserialize und lassen Sie die Ausgabe auf JSON. Erscheint ein Fehler zu einem unbekannten Format bei O:, hat das Widget ein Objekt gespeichert. Hören Sie hier auf und verwenden Sie PHP mit allowed_classes.
3. JSON bearbeiten und nur bei Bedarf neu serialisieren
Korrigieren Sie die Schlüssel im JSON und kodieren Sie es danach mit php-serialize erneut. Dieser Roundtrip gilt für Arrays und Skalare, die dieser Parser unterstützt. Das Ergebnis stimmt nicht Byte für Byte mit dem ursprünglichen WordPress-String überein (Reihenfolge der Schlüssel, Leerzeichen). Verwenden Sie wenn möglich WP-CLI wp option update mit JSON.
Redis zeigt einen Wert, der mit a: beginnt. Sie möchten wissen, welche Konfigurationsschlüssel in der Nutzlast stecken, bevor Sie den Schlüssel löschen.
1. Den Wert als Rohtext kopieren
redis-cli maskiert die Anführungszeichen in einem Wert, solange Sie nicht den Raw-Modus nutzen. Kopieren Sie den Wert daher als Rohtext. Steht vor dem ersten a: oder s: noch etwas, etwa der Ablaufzeitstempel, den der Datei-Cache-Treiber von Laravel zuerst schreibt, entfernen Sie es.
2. Lokal dekodieren
Fügen Sie die Zeichenkette in den Unserializer ein. Verschachtelte Arrays werden zu JSON-Objekten oder -Arrays. Nullwerte bleiben erhalten, solange die Option für Nullwerte aktiv ist (Standard).
3. Objekt-Nutzlasten PHP überlassen
Ein Klassen-Token wie Illuminate\… löst einen Fehler aus. Das Tool verhält sich wie dokumentiert, der Redis-Dump ist nicht defekt.
Wann Sie weiterhin PHP brauchen (und wie der Array-Roundtrip läuft)
Enthält der Blob Objekte oder arbeiten Sie in einem Deployment-Skript, dekodieren Sie in PHP, ohne Klassen zu instanziieren. Objekte der Klasse __PHP_Incomplete_Class nennen den Klassennamen, ohne Konstruktoren auszuführen. FastMinify ersetzt diesen Schutz nicht.
Einfaches Beispiel
Der WordPress-Core kennt das Format bereits. maybe_unserialize() liefert Arrays als Arrays, und WP-CLI gibt JSON aus, sodass Sie Längenangaben nie von Hand ändern. Nutzen Sie FastMinify, wenn Ihnen nur ein SQL-Export oder ein Text aus einem Ticket vorliegt. Schreiben Sie zurück über die WordPress-APIs, nicht per rohem UPDATE auf einen von Hand geänderten serialize()-String.
Einfaches Beispiel
Dekodieren Sie mit php-unserialize, bearbeiten Sie das JSON und kodieren Sie es mit php-serialize. Verschachtelte JSON-Objekte werden zu PHP-Arrays, nicht zu O:-Objekten. Wer Schlüssel sortiert oder Nullwerte und leere Strukturen entfernt, ändert, was er zurückschreibt. Die Dokumentation des Tools sagt es deutlich: Es ist kein byte-genaues Werkzeug für WordPress-SQL-Migrationen. Für CSS und JS derselben Seite nutzen Sie den WordPress-Minifizierungsleitfaden, eine andere Pipeline.
Einfaches Beispiel
Zusammenfassung
Fügen Sie die serialize()-Zeichenkette ein und lesen Sie das JSON. Entscheiden Sie dann, ob die Nutzlast ein Array für den Roundtrip ist oder ein Objekt, das in PHP gehört. FastMinify prüft lokal und lehnt O:/R: ab. Es ersetzt weder unserialize() noch WP-CLI und ist kein sicheres Suchen-und-Ersetzen für MySQL-Dumps. Für das Format im Detail halten Sie den PHP-Serialisierungsleitfaden bereit.
Jetzt einen WordPress- oder Session-Blob dekodieren
Verwandte Artikel

HTTP/2 und HTTP/3 ändern den Weg der Dateien, nicht ihre Größe. Messungen zu Größe, Kompilierzeit und Bundling zeigen, was Minifizierung noch bringt.

Rechnen Sie eine Unix-Epoche in ein lesbares Datum um und zurück, unterscheiden Sie Sekunden und Millisekunden und meiden Sie Zeitzonen-, JWT- und Zeitumstellungsfallen.

Lesen Sie einen Cron-Ausdruck Feld für Feld, prüfen Sie die nächsten Ausführungen in UTC oder Ortszeit und meiden Sie Fallen bei Schritten und Zeitzonen.