Signatur
Beschreibung
openssl_x509_free() gibt eine Zertifikats-Ressource frei, die zuvor z. B. mit openssl_x509_read() geladen wurde. In PHP 5 und 7 arbeitete die OpenSSL-Erweiterung noch mit klassischen resource-Handles; seit PHP 8.0 werden diese durch Instanzen der Klasse OpenSSLCertificate ersetzt, die automatisch vom Garbage Collector verwaltet werden.
In PHP 8.0 und höher ist ein expliziter Aufruf von openssl_x509_free() daher nicht mehr notwendig, da OpenSSLCertificate-Objekte beim Verlieren des letzten Verweises automatisch freigegeben werden. Die Funktion ist weiterhin vorhanden (als No-Op für Objekte), um die Abwärtskompatibilität zu wahren.
In PHP 5 und 7 hingegen war es gute Praxis, Ressourcen explizit freizugeben, sobald sie nicht mehr benötigt werden – insbesondere in lang laufenden Skripten oder Schleifen, die viele Zertifikate verarbeiten, um Speicherlecks zu vermeiden.
Seit PHP 8.0 ist die Funktion als veraltet (deprecated) markiert und erzeugt in neueren Versionen ggf. eine Deprecation-Meldung. Neuer Code sollte auf den Aufruf verzichten und stattdessen dem Garbage Collector die Verwaltung überlassen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $certificate Pflicht | OpenSSLCertificate|resource | Das freizugebende X.509-Zertifikat – in PHP 8+ eine OpenSSLCertificate-Instanz, in älteren Versionen ein resource-Handle, wie es z. B. von openssl_x509_read() zurückgegeben wird. |
Rückgabewert
Beispiele
Zertifikat laden und Ressource manuell freigeben (PHP 5/7)
<?php
// Zertifikat aus einer PEM-Datei laden
$certPem = file_get_contents('/etc/ssl/certs/example.pem');
$cert = openssl_x509_read($certPem);
if ($cert === false) {
die('Zertifikat konnte nicht gelesen werden.');
}
// Zertifikat-Informationen auslesen
$info = openssl_x509_parse($cert);
echo 'Aussteller: ' . $info['issuer']['CN'] . PHP_EOL;
echo 'Gültig bis: ' . date('Y-m-d', $info['validTo_time_t']) . PHP_EOL;
// Ressource explizit freigeben (wichtig in PHP 5/7)
openssl_x509_free($cert);
?>
Moderner PHP-8-Code ohne explizite Freigabe
<?php
// In PHP 8+ wird OpenSSLCertificate automatisch verwaltet
$certPem = file_get_contents('/etc/ssl/certs/example.pem');
$cert = openssl_x509_read($certPem);
if ($cert === false) {
die('Zertifikat konnte nicht gelesen werden.');
}
$info = openssl_x509_parse($cert);
echo 'Subject CN: ' . ($info['subject']['CN'] ?? 'n/a') . PHP_EOL;
// Kein openssl_x509_free() nötig – wird automatisch freigegeben,
// sobald $cert den Gültigkeitsbereich verlässt.
?>
// Wichtig · Fallstricke
Deprecation: Ab PHP 8.0 ist openssl_x509_free() offiziell als veraltet markiert. In PHP 8.x erzeugt der Aufruf eine E_DEPRECATED-Warnung. Neuer Code sollte die Funktion nicht mehr verwenden; bestehender Code für PHP 5/7 sollte beim Upgrade auf PHP 8 entsprechend angepasst werden.
In lang laufenden PHP-7-Prozessen (z. B. CLI-Daemons, Warteschlangen-Worker) sollte openssl_x509_free() dennoch konsequent aufgerufen werden, um Speicherlecks durch nicht freigegebene OpenSSL-Ressourcen zu vermeiden.