Signatur
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
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;
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;
}
// 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.