Heim  >  Artikel  >  Backend-Entwicklung  >  Serialisierung und Deserialisierung in PHP

Serialisierung und Deserialisierung in PHP

高洛峰
高洛峰Original
2017-02-18 17:07:49775Durchsuche

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=&#39;.urlencode(serialize($shopping)).&#39;">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!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn