Serialize
Daten aus PHP in Datenbank oder Datei speichern
$array = [
0 => 1,
'foo' => 'bar',
];
$serialized = serialize($array);
echo $serialized;
Ergebnis:
a:2:{i:0;i:1;s:3:"foo";s:3:"bar";}
a: Array
i: Integer
s: String
Zahl: Länge
serialize
$serialized = serialize($array);
unserialize
$array = unserialize($serialized);
fix
Neu berechnen der Länge der Variablen:
function unserializeAndFix(string $serialized) : array
{
$unserialized = unserialize($serialized);
if ($unserialized !== false) {
return $unserialized;
}
return unserialize(fixSerializedString($serialized));
}
function fixSerializedString(string $serialized) : string
{
return preg_replace_callback(
'/s:([0-9]+):\"(.*?)\";/',
function ($matches) {
return "s:".strlen($matches[2]).':"'.$matches[2].'";';
},
$serialized
);
}
$filename = './serialized.txt';
$serialized = file_get_contents($filename);
$unserialized = @unserialize($serialized);
if ($unserialized !== false) {
echo 'Keine Fehler gefunden.' . PHP_EOL;
exit;
}
$fixed = fixSerializedString($serialized);
$unserialized = @unserialize($fixed);
if ($unserialized === false) {
echo 'Fehler konnten nicht repariert werden.' . PHP_EOL;
exit;
}
file_put_contents($filename, "\n\nFixed:\n" . $fixed, FILE_APPEND);
echo 'Fehler gefunden und repariert.' . PHP_EOL . 'Ergebnis in ' . $filename . ' gespeichert.' . PHP_EOL;
Last updated