Aktueller Standort: Startseite> Neueste Artikel> Speichern Sie den Objektzustand durch Serialize: Probleme, die darauf achten, wenn sie anhaltenden Objekten bestehen

Speichern Sie den Objektzustand durch Serialize: Probleme, die darauf achten, wenn sie anhaltenden Objekten bestehen

gitbox 2025-05-27

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.

Verwenden Sie die Serialisierungsfunktion , um den Objektzustand zu speichern

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.

Beispielcode

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

Code Erläuterung

  1. Definitionsobjekt : Erstens wird eine Benutzerklasse definiert und ein Instanzbenutzer erstellt, der den Namen und die E -Mail des Benutzers enthält.

  2. Serialize -Objekt : Objekt $ Benutzer in eine Zeichenfolge konvertieren, indem Sie Serialize ($ user) aufrufen.

  3. Daten speichern : Die serialisierten Daten können im Dateisystem oder der Datenbank gespeichert werden. Hier speichern wir es in der Datei user_data.txt .

  4. Deserialisierung : Daten in einem Objekt durch die unverzündete Funktion wiederherstellen.

  5. Ausgabedaten : Durch die Deserialisierung des Objekts können wir auf die Eigenschaften zugreifen.

Dinge zu beachten, wenn Objekte bestehen bleiben

Obwohl die Serialisierungsfunktion sehr bequem ist, gibt es einige Dinge zu beachten, wenn Objekte bestehen:

1. Achten Sie auf die Abhängigkeit von Objekten

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.

2. Die Sicherheit der Deserialisierung

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.

3. Kompatibilität für Kreuzversion

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.

4. Speicherplatz

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.

5. Datenbank- und Dateispeicher

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.