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