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

Sérialisation et désérialisation en php

高洛峰
高洛峰original
2017-02-18 17:07:49820parcourir

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

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

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

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


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