Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung der Serialisierung und Deserialisierung in PHP

Detaillierte Erklärung der Serialisierung und Deserialisierung in PHP

黄舟
黄舟Original
2017-03-07 09:37:031352Durchsuche

In diesem Artikel werden die relevanten Kenntnisse zur Serialisierung und Deserialisierung in PHP vorgestellt. Es hat einen sehr guten Referenzwert, schauen wir uns den Editor unten an

Komprimieren Sie komplexe Datentypen in einen String

serialize() kombiniert Variablen und ihre Werte werden codiert in Textform

unserialize() stellt die ursprüngliche Variable wieder her

z. B.:

$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;s:5:"Larry";i:2;s:5:"Curly";}

Array ( [0] => Moe [1] => Larry [2] => Curly )

Beim Einfügen dieser serialisierten Daten in die URL zwischen Seiten Beim Übergeben müssen Sie urlencode( ) für diese Daten, um sicherzustellen, dass die darin enthaltenen URL-Metazeichen verarbeitet werden:

$shopping = array(&#39;Poppy seed bagel&#39; => 2,&#39;Plain Bagel&#39; =>1,&#39;Lox&#39; =>4);
echo &#39;<a href="next.php?cart=&#39;.urlencode(serialize($shopping)).&#39;" rel="external nofollow" >next</a>&#39;;

margic_quotes_gpc und magic_quotes_runtime Konfigurationselemente Die Einstellung wirkt sich auf die Daten aus, die zur Deserialisierung übergeben werden ().

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 vor dem Schreiben in die Datei mit addslashes() und vor dem Lesen mit stripeslashes() verarbeitet werden:

$fp = fopen(&#39;/tmp/cart&#39;,&#39;w&#39;);
fputs($fp,addslashes(serialize($a)));
fclose($fp);
//如果magic_quotes_runtime开启
$new_cat = unserialize(stripslashes(file_get_contents(&#39;/tmp/cart&#39;)));
//如果magic_quotes_runtime关闭
$new_cat = unserialize(file_get_contents(&#39;/tmp/cart&#39;));

Wenn magic_quotes_runtime aktiviert ist, müssen aus der Datenbank gelesene serialisierte Daten auch von stripeslashes() verarbeitet und in der Datenbank gespeichert werden. Die serialisierten Daten müssen von addslashes() verarbeitet werden, damit sie ordnungsgemäß gespeichert werden können.

mysql_query("insert into cart(id,data) values(1,&#39;".addslashes(serialize($cart))."&#39;)");
$rs = mysql_query(&#39;select data from cart where id=1&#39;);
$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.

Das Obige ist die detaillierte Erklärung der Serialisierung und Deserialisierung in PHP. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


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