Maison > développement back-end > tutoriel php > Sérialisation et désérialisation en php

Sérialisation et désérialisation en php

高洛峰
Libérer: 2023-03-05 20:28:01
original
875 Les gens l'ont consulté

Compresser les types de données complexes dans une chaîne

serialize() Encoder les variables et leurs valeurs sous forme de texte

unserialize() Restaurer les variables 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 : "Larry";i:2;s:5:"Curly";}

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

Lorsque ces données sérialisées sont placées dans l'URL et transmises entre les pages, vous devez appeler urlencode() sur les données pour vous assurer que les métacaractères de l'URL qu'elles contiennent sont traités :


$shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);
echo '<a href="next.php?cart=&#39;.urlencode(serialize($shopping)).&#39;">next</a>';
Copier après la connexion

Les paramètres des éléments de configuration margic_quotes_gpc et magic_quotes_runtime affecteront les données transmises à 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 de les écrire dans le fichier, et avant de les lire. Vous devez utiliser stripslashes() pour le traitement :

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

Pour plus d'articles liés à la sérialisation et à la désérialisation en php, veuillez faire attention au site Web PHP chinois !


É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