Regex / Code, um beschädigte serialisierte PHP-Daten zu reparieren

8

Ich habe ein riesiges mehrdimensionales Array, das von PHP serialisiert wurde. Es wurde in MySQL gespeichert und das Datenfeld war nicht groß genug ... das Ende wurde abgeschnitten ... Ich muss die Daten extrahieren ... unserialize funktioniert nicht ... weiß irgendjemand von einem Code das kann alle Arrays schließen ... Stringlängen neu berechnen ... es sind zu viele Daten von Hand zu tun.

Vielen Dank.

    
Simon 30.06.2010, 11:23
quelle

10 Antworten

30

Dies ist die Neuberechnung der Länge der Elemente in einem serialisierten Array:

%Vor%

Es funktioniert jedoch nicht, wenn Ihre Zeichenfolgen "; enthalten. In diesem Fall ist es nicht möglich, die serialisierte Array-Zeichenfolge automatisch zu korrigieren - manuelle Bearbeitung ist erforderlich.

    
Emil M 07.04.2011 12:28
quelle
9

Ich habe alles versucht, was in diesem Post gefunden wurde und nichts hat für mich funktioniert. Nach Stunden des Schmerzes hier ist, was ich in den tiefen Seiten von Google fand und schließlich funktionierte:

%Vor%

Sie rufen die Routine wie folgt auf:

%Vor%     
Mishu Vlad 11.12.2015 13:13
quelle
5

Lösung für mich:

unserialize( serialize_corrector( $serialized_string ) ) ;

code:

%Vor%

versuche es online:

Serialized String Fixer (Onlinetool)

    
T.Todua 11.08.2016 08:15
quelle
1

Das folgende Snippet versucht, & amp; rekursiv beschädigte serialisierte Zeichenfolge (Blobdaten) analysieren. Zum Beispiel, wenn Sie zu lange in die Spaltenspalte der Datenbank gespeichert haben und diese abgeschnitten wurde. Numerische Primitive und Bool sind garantiert gültig, Strings können abgeschnitten und / oder Array-Schlüssel fehlen. Die Routine kann z.B. wenn das Wiederherstellen von signifikanten (nicht allen) Daten eine ausreichende Lösung für Sie darstellt.

%Vor%     
lubosdz 01.08.2016 21:32
quelle
1

Verwendung von preg_replace_callback() anstelle von preg_replace(.../e) (weil /e modifier ist veraltet ).

%Vor%     
Mohamad Rostami 28.07.2014 12:52
quelle
0

Ich bezweifle, dass jemand Code schreiben würde, um teilweise gespeicherte Arrays abzurufen :) Ich habe ein Ding wie dieses einmal, aber mit der Hand repariert und es dauerte Stunden, und dann erkannte ich, dass ich diesen Teil des Arrays nicht brauche ...

Wenn es nicht wirklich wichtige Daten sind (und ich meine wirklich wichtig), wäre es besser, dieses eine zu verlassen

    
Quamis 30.06.2010 12:42
quelle
0

Basierend auf @Emil M Antwort Hier ist eine feste Version, die mit einem doppelten Anführungszeichen arbeitet.

%Vor%     
Kamal Saleh 06.04.2016 14:39
quelle
0

Beste Lösung für mich:

$output_array = unserialize(My_checker($serialized_string));

code:

%Vor%     
T.Todua 11.08.2016 08:24
quelle
-1

Das Serialisieren ist fast immer schlecht, weil Sie es in keiner Weise suchen können. Entschuldigung, aber es scheint, als ob Sie in eine Ecke gedrängt sind ...

    
Webnet 30.06.2010 13:44
quelle
-2

Sie können ungültige serialisierte Daten über ein Array in den Normalzustand zurückversetzen:)

%Vor%     
Mahran Elneel 10.03.2015 10:11
quelle

Tags und Links