PHP serialize - PHP::Serialization
Geschrieben von Harald Lapp in PHP um 09:54
Ich muss ein PHP object über 'serialize' serialisieren, an Perl weiterreichen und dort über das Modul PHP::Serialization auspacken. Ich habe Stunden damit zugebracht herauszufinden, warum ich auf meine Objektvariablen nicht zugreifen kann.
class test {
public $public_key = 'public_val';
private $private_key = 'private_val';
}
"Eigentlich" ist es logisch, dass PHP "auf irgendeine Art und Weise"" im serialisierten String kenntlich machen muss, welche Bestandteile des Objekts private und welche public sind, da ansonsten PHP selbst das Objekt nicht mehr korrekt deserialisieren könnte. Solchen Fragen muss man sich aber erst stellen, wenn man ein seralisiertes Objekt mit etwas anderem als PHP weiterverarbeiten möchte ... . Der Data::Dumper von Perl jedenfalls gibt für das deserialisierte Objekt folgendes zurück:
$VAR1 = bless( {
'public_key' => 'public_val',
'testprivate_key' => 'private_val'
}, 'PHP::Serialization::Object::test' );
Die Ausgabe von ...
print Dumper($obj->{'testprivate_key'});
... liefert jedoch ein "undef" - was ist da los? Ganz einfach: PHP fügt nicht nur den Namen der Klasse in den Namen der Objektvariablen beim Serialisieren des Objektes ein, sondern zusätlich vor und hinter dem Namen der Klasse je ein null-Byte:
0000000: 4f3a 343a 2274 6573 7422 3a32 3a7b 733a O:4:"test":2:{s:
0000010: 3130 3a22 7075 626c 6963 5f6b 6579 223b 10:"public_key";
0000020: 733a 3130 3a22 7075 626c 6963 5f76 616c s:10:"public_val
0000030: 223b 733a 3137 3a22 0074 6573 7400 7072 ";s:17:".test.pr
0000040: 6976 6174 655f 6b65 7922 3b73 3a31 313a ivate_key";s:11:
0000050: 2270 7269 7661 7465 5f76 616c 223b 7d "private_val";}
Ein Dank an dieser Stelle geht an Plu, der mir beim Debuggen geholfen hat und nicht müde wird all meine Perl-Fragen zu beantworten.




