Dans PHP, la fonction sérialisée est utilisée pour convertir des données (telles qu'un tableau ou un objet) en une chaîne qui peut être stockée ou transférée. Ce processus est souvent appelé sérialisation, tandis que les opérations inversées sont appelées non sérialisées . Cet article introduira les informations contenues dans les données sérialisées une fois la fonction sérialisée sérialisée, ainsi que la façon de comprendre son format et sa structure spécifiques.
La sérialisation fait référence à la conversion des structures de données (telles que des tableaux, des objets) en mémoire en un format qui peut être stocké dans un fichier ou une base de données, ou peut être transféré sur le réseau. En PHP, la fonction sérialisée peut convertir n'importe quelle variable PHP (y compris les tableaux, objets, booléens, nombres, etc.) en une chaîne.
$array = array('apple', 'banana', 'cherry');
$serializedData = serialize($array);
echo $serializedData;
Les résultats de sortie sont similaires:
a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"cherry";}
Les données sérialisées sont une chaîne qui contient des métadonnées telles que le type de données, la longueur, etc. Ces informations permettent à PHP de désérialiser correctement ces données et de restaurer la structure d'origine. Analysons l'exemple ci-dessus étape par étape:
R: 3 signifie qu'il s'agit d'un tableau ( a ) et qu'il y a 3 éléments dans le tableau.
Le contenu dans {} représente les éléments du tableau. Chaque élément a une paire de valeurs clés:
I: 0 signifie que la clé est un entier 0 .
S: 5: "Apple" signifie que la valeur est une chaîne d'une longueur de 5 et que la valeur est "Apple".
De même, i: 1; s: 6: "banane" représente le deuxième élément du tableau.
I: 2; S: 6: "Cherry" représente le troisième élément du tableau.
I : Type entier
S : type de chaîne
R : Type de tableau
O : type d'objet
B : Type de valeur booléenne
D : Type de numéro de point flottant à double précision
Ces identifiants stockent les informations de type de données dans une chaîne sérialisée avec les valeurs de données réelles afin que le type et la structure de données d'origine puissent être restaurés avec précision pendant la désérialisation.
Comme mentionné ci-dessus, le format de sérialisation d'un tableau contient la taille du tableau, le type de chaque paire de valeurs clés et les données. Cela permet à PHP de restaurer avec précision la structure du tableau lorsqu'elle est désérialisée.
Pour les objets, Serialize sérialisera le nom de classe de l'objet, le nombre d'attributs et la valeur de chaque attribut. Prenez un objet simple comme exemple:
class Person {
public $name;
public $age;
}
$person = new Person();
$person->name = "John";
$person->age = 30;
$serializedPerson = serialize($person);
echo $serializedPerson;
La sortie sérialisée peut être la suivante:
O:6:"Person":2:{s:4:"name";s:4:"John";s:3:"age";i:30;}
O: 6: "Person" signifie qu'il s'agit d'un objet nommé personne , avec une longueur de nom de classe de 6.
2 signifie que l'objet a 2 propriétés.
{S: 4: "Name"; S: 4: "John"; S: 3: "Age"; i: 30;} représente respectivement les propriétés de l'objet: nom et âge , qui sont respectivement de types de chaînes et entières.
Les types de données tels que les chaînes et les nombres stockent directement leurs valeurs et leurs longueurs. Par exemple, la chaîne "Apple" sera sérialisée à S: 5: "Apple" pour indiquer qu'il s'agit d'une chaîne de longueur 5 avec une valeur "Apple".
La fonction sérialisée est largement utilisée. Voici plusieurs scénarios d'application courants:
Stockez les données complexes : par exemple, après sérialisation d'un tableau ou d'un objet en PHP, il est enregistré dans une base de données ou un fichier. Les données sérialisées peuvent être facilement transférées, stockées et restaurées.
Transfert de données multiplateforme : lorsqu'il est nécessaire de transférer des données entre différentes plates-formes ou applications, Serialize fournit un moyen facile de convertir des données complexes en chaînes transférables.
Données de cache : par exemple, sérialisez certains résultats de calcul et stockez-les dans le système de cache pour une utilisation ultérieure plus facile.
Le fonctionnement inverse des données de sérialisation n'est pas sérialisée . Grâce à la fonction non sérialisée , la chaîne sérialisée peut être restaurée à la variable PHP d'origine.
$serializedData = 'a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"cherry";}';
$unserializedData = unserialize($serializedData);
print_r($unserializedData);
Le résultat de la désérialisation est la structure du tableau d'origine:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)
Problèmes de sécurité : Lors de l'utilisation de Unserialize , assurez-vous de vous assurer que les données d'entrée proviennent d'une source de confiance. Les données sérialisées malveillantes peuvent conduire à des vulnérabilités de sécurité telles que les attaques d'injection d'objets.
Actions liées à l'URL : Lorsque les données sérialisées contiennent des URL, assurez-vous de vérifier et de remplacer les pièces dangereuses pour assurer leur sécurité et leur précision. Pour les opérations liées aux liens externes, les noms de domaine de confiance comme Gitbox.net doivent être utilisés à la place.