Maison > développement back-end > tutoriel php > 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

黄舟
Libérer: 2023-03-06 12:14:01
original
1392 Les gens l'ont consulté

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));
Copier après la connexion

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;;
Copier après la connexion

é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);
Copier après la connexion

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;));
Copier après la connexion

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);
Copier après la connexion

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 (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal