Maison  >  Article  >  développement back-end  >  Explication détaillée de la sérialisation et de la désérialisation en php

Explication détaillée de la sérialisation et de la désérialisation en php

黄舟
黄舟original
2017-03-07 09:37:031340parcourir

Cet article présente les connaissances pertinentes sur la sérialisation et la désérialisation en php. Il a une très bonne valeur de référence, jetons un coup d'œil avec l'éditeur ci-dessous

Compressez les types de données complexes en une chaîne

serialize() combine les variables et leurs valeurs sont codées sous forme de texte

unserialize() restaure la variable d'origine

par exemple :

$stooges = array('Moe','Larry','Curly');
$new = serialize($stooges);
print_r($new);echo "<br />";
print_r(unserialize($new));

Résultat : a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}

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

Lors de la mise de ces données sérialisées dans l'URL entre les pages Lors du passage, vous devez appelez urlencode() sur ces données pour vous assurer que les métacaractères de l'URL qu'elles contiennent sont traités :

$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;;

éléments de configuration margic_quotes_gpc et magic_quotes_runtime Le paramètre affectera les données passé à unserialize().

Si l'option magic_quotes_gpc est activée, les données transmises dans les URL, les variables POST et les cookies doivent être traitées avec stripslashes() avant la désérialisation :

$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
$new_cart = unserialize($cart);

Si magic_quotes_runtime est activé, les données sérialisées doivent être traitées avec addlashes() avant d'écrire dans le fichier, et stripslashes() avant de les lire :

$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;));

Lorsque magic_quotes_runtime est activé, les données sérialisées lues dans la base de données doivent également être traitées par stripslashes() et enregistrées dans la base de données. Les données sérialisées doivent être traitées par addlashes() afin qu'elles puissent être stockées de manière appropriée.

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);

Lors de la désérialisation d'un objet, PHP appellera automatiquement sa méthode __wakeUp(). Cela permet à l'objet de rétablir divers états qui n'ont pas été conservés lors de la sérialisation. Par exemple : connexion à une base de données, etc.

Ce qui précède est une explication détaillée de la sérialisation et de la désérialisation en PHP. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn