Start · Sprachen · PHP · Referenz · rnp_ffi_destroy

rnp_ffi_destroy

Funktion

Zerstört ein <code>RnpFFI</code>-Objekt und gibt alle damit verbundenen Ressourcen frei.

seit PHP 8.0.0 Kategorie: crypto

Signatur

rnp_ffi_destroy(RnpFFI $ffi): bool

Beschreibung

rnp_ffi_destroy beendet die Lebensdauer eines zuvor mit rnp_ffi_create erzeugten RnpFFI-Objekts. Dabei werden alle intern gespeicherten Schlüssel, Keyrings, Handles und sonstiger Speicher freigegeben, der der Bibliothek zugeordnet war.

Die Funktion sollte immer dann aufgerufen werden, wenn ein FFI-Kontext nicht mehr benötigt wird, um Speicherlecks zu vermeiden. Besonders in langlaufenden Prozessen (z. B. Webserver-Skripte, Daemons) ist das explizite Zerstören wichtig, da PHP die Ressource sonst erst am Ende des Skripts freigibt.

Nach dem Aufruf ist das übergebene RnpFFI-Objekt ungültig. Jeder weitere Zugriff darauf führt zu einem Fehler. Es empfiehlt sich daher, den Rückgabewert zu prüfen und die Variable anschließend auf null zu setzen.

Die Funktion ist Teil der RNP-Erweiterung für PHP, welche OpenPGP-Operationen (Verschlüsselung, Signierung, Schlüsselverwaltung) über die librnp-Bibliothek bereitstellt.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Das RnpFFI-Objekt, das zuvor mit rnp_ffi_create erzeugt wurde und nun zerstört werden soll.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Objekt erfolgreich zerstört wurde, andernfalls false.

Beispiele

Einfaches Erstellen und Zerstören eines RnpFFI-Objekts

<?php
// FFI-Kontext für OpenPGP (GPG-Schlüsselformat) erzeugen
$ffi = rnp_ffi_create('GPG', 'GPG');

if ($ffi === false) {
    echo 'Fehler beim Erstellen des FFI-Objekts.';
    exit(1);
}

// ... OpenPGP-Operationen durchführen ...

// Ressourcen explizit freigeben
$result = rnp_ffi_destroy($ffi);

if ($result) {
    echo 'FFI-Objekt erfolgreich zerstört.';
} else {
    echo 'Fehler beim Zerstören des FFI-Objekts.';
}

// Variable auf null setzen, um weiteren Zugriff zu verhindern
$ffi = null;
FFI-Objekt erfolgreich zerstört.

Verwendung mit try/finally zur sicheren Ressourcenfreigabe

<?php
$ffi = rnp_ffi_create('GPG', 'GPG');

if ($ffi === false) {
    throw new RuntimeException('FFI konnte nicht erstellt werden.');
}

try {
    // Schlüssel laden und verschlüsseln
    rnp_load_keys($ffi, 'GPG', '/pfad/zum/pubring.pgp', RNP_LOAD_SAVE_PUBLIC_KEYS);

    // Weitere Operationen ...
    echo 'Operationen abgeschlossen.' . PHP_EOL;
} finally {
    // Garantierte Freigabe auch im Fehlerfall
    rnp_ffi_destroy($ffi);
    $ffi = null;
    echo 'Ressourcen freigegeben.' . PHP_EOL;
}
Operationen abgeschlossen. Ressourcen freigegeben.

// Wichtig · Fallstricke

Sicherheitshinweis: In Szenarien, in denen private Schlüssel oder Passphrasen im FFI-Kontext geladen wurden, sollte rnp_ffi_destroy so früh wie möglich aufgerufen werden, um sensible Daten aus dem Speicher zu entfernen. PHP kann den Speicher nicht garantiert sofort nullen, aber die frühzeitige Freigabe reduziert das Zeitfenster für potenzielle Speicher-Dumps.

Nach dem Aufruf von rnp_ffi_destroy darf das Objekt nicht mehr verwendet werden – auch nicht für weitere Destroy-Aufrufe. Ein doppelter Aufruf kann zu undefiniertem Verhalten führen.

Alle von diesem FFI-Kontext abgeleiteten Handles (z. B. Schlüssel-Handles) werden ebenfalls ungültig, sobald das übergeordnete Objekt zerstört wurde.