In PHP wird die Serialisierungsfunktion verwendet, um Datenstrukturen wie Objekte, Arrays usw. in Zeichenfolgenformate umzuwandeln, damit sie in Datenbanken, Dateisystemen oder anderen anhaltenden Speicher gespeichert werden können. Deserialize ( unserialisieren ) konvertiert die Zeichenfolge zurück in die ursprüngliche Datenstruktur. Die Verwendung von Serialize zum Speichern des Objektzustands ist eine gemeinsame Technik, insbesondere wenn es notwendig ist, Benutzersitzungen, Cache oder Daten zwischen verschiedenen Seiten zu übergeben.
In diesem Artikel wird erläutert, wie der Objektzustand durch die Serialisierungsfunktion von PHP speichert und einige Dinge untersucht, auf die Sie bei fortdehnernden Objekten achten können.
Die Serialisierungsfunktion nimmt eine PHP -Variable als Parameter ein und wandelt sie in eine Zeichenfolge um, die gespeichert und übertragen werden kann. Zum Beispiel können wir für ein einfaches Objekt sie serialisieren und in einer Datenbank oder Datei speichern und dann den ursprünglichen Status des Objekts durch Deserialisierung wiederherstellen.
<?php
// Definieren Sie eine einfache Klasse
class User {
public $name;
public $email;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
}
// Ein Objekt erstellen
$user = new User("John Doe", "[email protected]");
// Objekte serialisieren
$serializedUser = serialize($user);
// Speichern serialisierten Daten in einer Datei oder Datenbank
file_put_contents("user_data.txt", $serializedUser);
// Simulieren Sie den Deserialisierungsprozess
$retrievedData = file_get_contents("user_data.txt");
$unserializedUser = unserialize($retrievedData);
// Ausgabedeserialisierter Objekt
echo "Name: " . $unserializedUser->name . "<br>";
echo "Email: " . $unserializedUser->email;
?>
Definitionsobjekt : Erstens wird eine Benutzerklasse definiert und ein Instanzbenutzer erstellt, der den Namen und die E -Mail des Benutzers enthält.
Serialize -Objekt : Objekt $ Benutzer in eine Zeichenfolge konvertieren, indem Sie Serialize ($ user) aufrufen.
Daten speichern : Die serialisierten Daten können im Dateisystem oder der Datenbank gespeichert werden. Hier speichern wir es in der Datei user_data.txt .
Deserialisierung : Daten in einem Objekt durch die unverzündete Funktion wiederherstellen.
Ausgabedaten : Durch die Deserialisierung des Objekts können wir auf die Eigenschaften zugreifen.
Obwohl die Serialisierungsfunktion sehr bequem ist, gibt es einige Dinge zu beachten, wenn Objekte bestehen:
Wenn das Objekt intern von anderen Objekten abhängt oder die Klasse des Objekts geändert wird, können Probleme während der Deserialisierung auftreten. Insbesondere wenn sich die Struktur der Klasse ändert, kann sich die unverzündete Objektzustände nicht korrekt wiederherstellen, was zu einem Fehler führt.
Deserialisierungsvorgänge haben bestimmte Sicherheitsrisiken. Bösartige Benutzer können gefälschte serialisierte Zeichenfolgen errichten, wodurch PHP unsichere Code ausführt und sogar Schwachstellen für die Ausführung von Remotecode auslösen kann. Um dies zu vermeiden, können folgende Maßnahmen ergriffen werden:
Verwenden Sie JSON_CODE und JSON_DECODE anstelle von Serialize und Unserialisierung , insbesondere wenn die Datenstruktur einfacher ist.
Deserialisierte Daten werden streng validiert, um sicherzustellen, dass sie aus vertrauenswürdigen Quellen stammen.
In verschiedenen Versionen von PHP können Serialisierung und Unserialisierung unterschiedlich sein, insbesondere wenn sich die interne Implementierung der Klassen ändert. Wenn Sie es in einer Anwendung verwenden, sollten Sie daher die möglichen Auswirkungen von Versionsaktualisierungen berücksichtigen und die Versionskompatibilität sicherstellen.
Die serialisierte Zeichenfolge kann mehr Speicherplatz als die Originaldaten einnehmen. Bei der Speicherung einer großen Anzahl von Objekten sollte der räumliche Aufwand der Serialisierungsdaten berücksichtigt werden.
Beim Speichern von serialisierten Daten in der Datenbank sollte die Einschränkung der Feldlänge besondere Aufmerksamkeit geschenkt werden. Zum Beispiel kann das Feld Text oder Blob Typ große Segmente serialisierter Daten speichern, aber für größere Objekte, Paging oder andere Speicherstrategien müssen möglicherweise berücksichtigt werden.