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

Explication détaillée de la sérialisation et de la désérialisation PHP

墨辰丷
墨辰丷original
2018-05-25 14:53:051220parcourir

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 représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

PHP Sérialisation et Dé-Sérialisation Explication détaillée des fonctions avec images et texte

PHP implémente diverses méthodes de sérialisation/anti-sérialisation

formulaireSérialisationExplication détaillée (tutoriel image et texte)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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