Maison  >  Article  >  développement back-end  >  Résumé et comparaison de différentes sérialisations en php

Résumé et comparaison de différentes sérialisations en php

黄舟
黄舟original
2017-03-29 10:09:491220parcourir

La sérialisation est le processus de conversion d'une variable en une chaîne qui peut être enregistrée ou transmise ; la désérialisation consiste à convertir cette chaîne en variable d'origine au moment approprié. Ces deux processus se combinent pour stocker et transférer facilement des données, rendant le programme plus facile à maintenir. Regardons la comparaison des différentes sérialisations en PHP.

Préface

La sérialisation est la conversion de l'objetétat en un processus de formatage persistant ou transférable . Le contraire de la sérialisation est la désérialisation, qui convertit un flux en objet. Ces deux processus se combinent pour stocker et transférer facilement des données.

Le processus de conversion des informations sur l'état d'un objet en une forme pouvant être stockée ou transmise. Lors de la sérialisation, un objet écrit son état actuel dans un stockage temporaire ou persistant. Plus tard, l'objet peut être recréé en lisant ou en désérialisant l'état de l'objet à partir du magasin.

Normalement, tous les champs d'une instance d'objet sont sérialisés, ce qui signifie que les données sont représentées comme les données sérialisées de l'instance. De cette façon, le code capable d'interpréter le format peut être en mesure de déterminer la valeur des données sans dépendre de l'accessibilité du membre. De même, la désérialisation extrait les données de la représentation sérialisée et définit directement l'état de l'objet, là encore quelles que soient les règles d'accessibilité. Tout objet pouvant contenir des données de sécurité importantes doit être rendu non sérialisable si possible. S'il doit être sérialisable, essayez de générer des champs spécifiques pour contenir des données importantes qui ne sont pas sérialisables. Si cela n'est pas possible, vous devez savoir que les données seront exposées à tout code disposant d'autorisations de sérialisation et vous assurer qu'aucun code malveillant n'obtient cette autorisation.

sérialiser et désérialiserfonctions

Ces deux sont la sérialisation et la désérialisation des données en PHP Fonctions couramment utilisées. Favorable pour stocker ou transmettre des valeurs PHP sans perdre leur type et leur structure.

<?php

$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);

//序列化数组
$s = serialize($a);
echo $s;
//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}

echo &#39;<br /><br />&#39;;

//反序列化
$o = unserialize($s);

print_r($o);
//输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut )

?>

Des problèmes peuvent survenir lorsque les valeurs du tableau contiennent des caractères tels que des guillemets doubles, des guillemets simples ou des deux-points après leur désérialisation. Pour surmonter ce problème, une astuce intéressante consiste à utiliser base64_encode et base64_decode.

$obj = array();
//序列化
$s = base64_encode(serialize($obj));
//反序列化
$original = unserialize(base64_decode($s));

但是base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用。

//定义一个用来序列化对象的函数

function my_serialize( $obj )
{
 return base64_encode(gzcompress(serialize($obj)));
}

//反序列化
function my_unserialize($txt)
{
 return unserialize(gzuncompress(base64_decode($txt)));
}

json_encode et json_decode

L'utilisation de la sérialisation et de la désérialisation au format JSON est un bon choix :

La sortie utilisant les formats json_encode et json_decode est beaucoup plus rapide que les formats serialize et unserialize.

(1) Le format JSON est lisible.

(2) Le format de JSON est plus petit que le résultat des données renvoyées par serialize.

(3) Le format JSON est ouvert et portable. D'autres langues peuvent également l'utiliser.

$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
$s = json_encode($a);
echo $s;
//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}
 
echo &#39;<br /><br />&#39;;
 
//反序列化
$o = json_decode($s);

Dans l'exemple ci-dessus, la longueur de sortie json_encode est évidemment plus courte que la longueur de sortie serialize dans l'exemple précédent. Il convient de noter que json_encode ne peut pas sérialiser les objets.

Résumé

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