(PECL igbinary >= 1.1.1)
igbinary_serialize — Génère une représentation binaire stockable et compacte d'une valeur
Génère une représentation stockable d'une valeur.
C'est une technique pratique pour stocker ou passer des valeurs PHP entre scripts, sans perdre leur structure ni leur type.
Pour reconvertir la chaîne de caractères sérialisée en une valeur PHP, la fonction igbinary_unserialize() peut être utilisée.
value
La valeur à sérialiser. igbinary_serialize() gère tous les types sauf les ressources et certains objets (confère la note ci-dessous). Même des tableaux qui contiennent des références à eux-même peuvent être sérialisé avec igbinary_serialize(). Les références circulaires à l'intérieur d'un tableau ou d'un objet à sérialiser seront également stockées. Toute autre référence sera perdue.
Lorsqu'il sérialise des objets, igbinary tentera d'appeler les méthodes magiques __serialize() ou __sleep() avant la sérialisation. Cela permettra à l'objet de faire un nettoyage de dernière minute, etc., avant d'être sérialisé. De même, lorsque l'objet est restauré en utilisant la fonction igbinary_unserialize(), une des méthodes magiques __unserialize() ou __wakeup() est appelée.
Note:
Les attributs privés d'un objet auront le nom de la classe préfixé au nom de l'attribut; les attributs protégés seront préfixés avec un astérisque
'*'
. Ces valeurs préfixées ont des caractères nuls des deux cotés.
Retourne une chaîne de caractères contenant une représentation du paramètre value
sous forme de flux d'octets qui peut être stocké à n'importe quel endroit.
Il est à noter que c'est une chaîne binaire qui peut inclure des caractères nuls, et doit donc être stockée et gérée comme telle.
Par exemple, dans une base de données, la sortie de la fonction igbinary_serialize()
doit, en général, être stockée dans un champ de type BLOB
plutôt que dans un champ de type CHAR
ou TEXT
.
Exemple #1 Exemple avec igbinary_serialize()
<?php
$ser = igbinary_serialize(['test', 'test']);
echo urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>
L'exemple ci-dessus va afficher :
%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00 array ( 0 => 'test', 1 => 'test', )
Note:
Il est à noter que de nombreux objets internes de PHP ne peuvent pas être sérialisés. Cependant, ceux qui le peuvent implémentent soit l'interface Serializable soit les méthodes magiques __serialize()/__unserialize() ou __sleep()/__wakeup(). Si une classe interne ne remplit aucune de ces conditions, elle ne peut pas être sérialisée de manière fiable.
Il existe des exceptions historiques à cette règle, où des objets internes peuvent être sérialisés sans implémenter ni l'interface ni les méthodes magiques.