Heim >Backend-Entwicklung >PHP-Tutorial >Serialisierung und Deserialisierung in PHP
Komplexe Datentypen in eine Zeichenfolge komprimieren
serialize() Variablen und ihre Werte in Textform kodieren
unserialize() Originalvariablen wiederherstellen
zB:
$stooges = array('Moe','Larry','Curly'); $new = serialize($stooges); print_r($new);echo "<br />"; print_r(unserialize($new));
Ergebnis: a:3:{i:0;s:3:"Moe";i:1; "Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )
Wenn diese serialisierten Daten in die URL eingefügt und zwischen Seiten weitergegeben werden, müssen Sie urlencode() für die Daten aufrufen, um sicherzustellen, dass die darin enthaltenen URL-Metazeichen verarbeitet werden:
$shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4); echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'">next</a>';
Die Einstellungen der Konfigurationselemente margic_quotes_gpc und magic_quotes_runtime wirken sich auf die an unserialize() übergebenen Daten aus.
Wenn die Option magic_quotes_gpc aktiviert ist, müssen in URLs, POST-Variablen und Cookies übergebene Daten vor der Deserialisierung mit stripeslashes() verarbeitet werden:
$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启 $new_cart = unserialize($cart);
Wenn magic_quotes_runtime aktiviert ist, müssen serialisierte Daten mit addslashes() verarbeitet werden, bevor sie in die Datei geschrieben werden, und bevor sie gelesen werden. Sie müssen Stripslashes() für die Verarbeitung verwenden:
$fp = fopen('/tmp/cart','w'); fputs($fp,addslashes(serialize($a))); fclose($fp); //如果magic_quotes_runtime开启 $new_cat = unserialize(stripslashes(file_get_contents('/tmp/cart'))); //如果magic_quotes_runtime关闭 $new_cat = unserialize(file_get_contents('/tmp/cart')); 在启用了magic_quotes_runtime的情况下,从数据库中读取序列化的数据也必须经过stripslashes()的处理,保存到数据库中的序列化数据必须要经过addslashes()的处理,以便能够适当地存储。 mysql_query("insert into cart(id,data) values(1,'".addslashes(serialize($cart))."')"); $rs = mysql_query('select data from cart where id=1'); $ob = mysql_fetch_object($rs); //如果magic_quotes_runtime开启 $new_cart = unserialize(stripslashes($ob->data)); //如果magic_quotes_runtime关闭 $new_cart = unserialize($ob->data);
Beim Deserialisieren eines Objekts ruft PHP automatisch seine __wakeUp()-Methode auf. Dadurch kann das Objekt verschiedene Zustände wiederherstellen, die während der Serialisierung nicht beibehalten wurden. Zum Beispiel: Datenbankverbindung usw.
Weitere Artikel zum Thema Serialisierung und Deserialisierung in PHP finden Sie auf der chinesischen PHP-Website!