Start · Sprachen · PHP · Referenz · openssl_error_string

openssl_error_string

Funktion

Liest die nächste Fehlermeldung aus dem internen OpenSSL-Fehlerpuffer und gibt sie als Zeichenkette zurück.

seit PHP 4.0.6 Kategorie: crypto

Signatur

openssl_error_string(): string|false

Beschreibung

openssl_error_string() entnimmt eine Fehlermeldung aus dem internen Fehlerpuffer der OpenSSL-Bibliothek und gibt sie zurück. Jeder Aufruf liefert genau eine Meldung (FIFO-Prinzip); sind keine weiteren Fehler im Puffer, wird false zurückgegeben.

Die Funktion wird typischerweise in einer Schleife aufgerufen, um alle angesammelten OpenSSL-Fehlermeldungen nach einer fehlgeschlagenen OpenSSL-Operation (z. B. openssl_sign(), openssl_decrypt() oder openssl_x509_parse()) vollständig auszulesen. Erst durch vollständiges Leeren des Puffers ist sichergestellt, dass keine alten Fehler spätere Diagnosen verfälschen.

Die zurückgegebene Zeichenkette entspricht dem Format, das OpenSSL intern verwendet, beispielsweise error:0906D06C:PEM routines:PEM_read_bio:no start line. Sie enthält einen Fehlercode sowie Informationen über das betroffene Modul und die Fehlerstelle.

Da PHP keine automatische Leerung des OpenSSL-Fehlerpuffers vornimmt, empfiehlt es sich, den Puffer vor einer kritischen Operation durch vollständiges Auslesen zu leeren, um sicherzustellen, dass nur die Fehler der aktuellen Operation ausgewertet werden.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die nächste Fehlermeldung aus dem OpenSSL-Fehlerpuffer als string zurück. Ist der Puffer leer, wird false zurückgegeben.

Beispiele

Alle OpenSSL-Fehler nach einer fehlgeschlagenen Operation auslesen

<?php
// Absichtlich fehlerhafter Versuch, ein ungültiges Zertifikat zu lesen
$cert = openssl_x509_read('kein-gueltiges-zertifikat');

if ($cert === false) {
    echo "Fehler beim Lesen des Zertifikats:" . PHP_EOL;
    while ($msg = openssl_error_string()) {
        echo '  - ' . $msg . PHP_EOL;
    }
}
Fehler beim Lesen des Zertifikats: - error:0906D06C:PEM routines:PEM_read_bio:no start line

Fehlerpuffer vor einer Operation leeren und danach auswerten

<?php
// Fehlerpuffer leeren, um Altlasten zu vermeiden
while (openssl_error_string() !== false) {
    // Puffer vollständig leeren
}

$privateKey = openssl_pkey_get_private('file:///pfad/zu/privater-schluessel.pem');

if ($privateKey === false) {
    $errors = [];
    while ($msg = openssl_error_string()) {
        $errors[] = $msg;
    }
    throw new RuntimeException(
        'Privater Schlüssel konnte nicht geladen werden: ' . implode('; ', $errors)
    );
}

echo "Schlüssel erfolgreich geladen." . PHP_EOL;

// Wichtig · Fallstricke

Wichtig: Der OpenSSL-Fehlerpuffer ist global und wird nicht automatisch nach jeder Operation geleert. Es ist daher gute Praxis, den Puffer vor jeder kritischen OpenSSL-Operation zu leeren, um Fehlermeldungen aus früheren Operationen nicht fälschlicherweise der aktuellen zuzuordnen.

Die Fehlermeldungen sind in englischer Sprache und richten sich an Entwickler; sie sollten niemals unverändert an Endbenutzer ausgegeben werden, da sie interne Systemdetails (Bibliotheks- und Modulnamen) preisgeben können.