Start · Sprachen · PHP · Referenz · ldap_errno

ldap_errno

Funktion

Gibt den numerischen LDAP-Fehlercode der letzten LDAP-Operation auf der angegebenen Verbindung zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_errno(LDAP\Connection $ldap): int

Beschreibung

ldap_errno() liefert den internen Fehlercode, den der LDAP-Server oder die Client-Bibliothek für die zuletzt ausgeführte Operation auf der übergebenen Verbindungsressource gesetzt hat. Der Wert 0 bedeutet, dass kein Fehler aufgetreten ist (entspricht LDAP_SUCCESS).

Die Funktion ist besonders nützlich, wenn LDAP-Operationen wie ldap_search(), ldap_bind() oder ldap_add() fehlschlagen und man den genauen Fehlergrund ermitteln möchte. In Kombination mit ldap_error(), das eine menschenlesbare Fehlerbeschreibung zurückgibt, lässt sich eine aussagekräftige Fehlerbehandlung implementieren.

Die zurückgegebenen Fehlercodes entsprechen den standardisierten LDAP-Fehlercodes gemäß RFC 4511, z. B. 49 für Invalid Credentials oder 32 für No Such Object. Eine vollständige Liste der Codes ist in den LDAP-Spezifikationen oder der OpenLDAP-Dokumentation zu finden.

Beachte, dass der Fehlercode immer auf die letzte ausgeführte Operation bezogen ist. Er sollte daher unmittelbar nach der fehlgeschlagenen Funktion abgefragt werden, bevor eine weitere LDAP-Operation den Wert überschreibt.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsinstanz, wie sie von ldap_connect() zurückgegeben wird.

Rückgabewert

Typ
int
Beschreibung
Gibt den numerischen LDAP-Fehlercode der letzten Operation zurück. 0 bedeutet Erfolg (LDAP_SUCCESS). Alle anderen Werte repräsentieren spezifische Fehlerzustände gemäß LDAP-Spezifikation.

Beispiele

Fehlercode nach fehlgeschlagenem Bind abfragen

<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

$bindResult = @ldap_bind($ldap, 'cn=falscherBenutzer,dc=example,dc=com', 'falschesPasswort');

if (!$bindResult) {
    $errno = ldap_errno($ldap);
    $error = ldap_error($ldap);
    echo "LDAP-Fehler $errno: $error" . PHP_EOL;
    // Ausgabe z. B.: LDAP-Fehler 49: Invalid credentials
}

ldap_unbind($ldap);
LDAP-Fehler 49: Invalid credentials

Differenzierte Fehlerbehandlung anhand des Fehlercodes

<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

@ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheim');

$result = @ldap_search($ldap, 'dc=example,dc=com', '(uid=nichtVorhanden)');

if (!$result) {
    $errno = ldap_errno($ldap);
    switch ($errno) {
        case 32:
            echo 'Das gesuchte Objekt wurde nicht gefunden.' . PHP_EOL;
            break;
        case 49:
            echo 'Authentifizierung fehlgeschlagen.' . PHP_EOL;
            break;
        default:
            echo 'Unbekannter LDAP-Fehler: ' . ldap_error($ldap) . PHP_EOL;
    }
}

ldap_unbind($ldap);
Das gesuchte Objekt wurde nicht gefunden.

// Wichtig · Fallstricke

Fehlercode sofort auslesen: Da jede LDAP-Operation den internen Fehlercode überschreibt, muss ldap_errno() unmittelbar nach der fehlgeschlagenen Funktion aufgerufen werden. Spätere Operationen — auch erfolgreiche — setzen den Code auf 0 zurück.

Unterdrückung von PHP-Warnungen: Bei erwartbaren Fehlern empfiehlt es sich, LDAP-Funktionen mit dem @-Operator aufzurufen und den Fehler manuell über ldap_errno() und ldap_error() auszuwerten, um vollständige Kontrolle über die Fehlerausgabe zu behalten.

PHP 8.1: Ab PHP 8.1 erwartet die Funktion ein LDAP\Connection-Objekt anstelle der früher verwendeten resource-Ressource.