Start · Sprachen · PHP · Referenz · ldap_unbind

ldap_unbind

Funktion

Löst die Verbindung und Bindung zu einem LDAP-Verzeichnis und gibt die zugehörigen Ressourcen frei.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_unbind(LDAP\Connection $ldap): bool

Beschreibung

ldap_unbind() trennt eine bestehende LDAP-Verbindung, die zuvor mit ldap_connect() hergestellt und optional mit ldap_bind() authentifiziert wurde. Die Funktion sendet dabei eine LDAP Unbind Request-Operation an den Server und schließt die zugrunde liegende Netzwerkverbindung.

Nach dem Aufruf von ldap_unbind() ist das übergebene LDAP\Connection-Objekt nicht mehr gültig und sollte nicht weiterverwendet werden. Alle weiteren Operationen auf dieser Verbindung würden fehlschlagen. Dies macht ldap_unbind() zum korrekten Abschluss jeder LDAP-Sitzung.

Die Funktion sollte stets aufgerufen werden, wenn LDAP-Operationen abgeschlossen sind, um Serverressourcen freizugeben und die Verbindung sauber zu beenden. In modernem PHP (ab 8.1) wird statt des alten resource-Typs ein LDAP\Connection-Objekt verwendet.

Beachte, dass ldap_unbind() und ldap_bind() trotz ihrer Namen keine Gegenstücke im klassischen Sinne sind: ldap_unbind() schließt die gesamte Verbindung, nicht nur die Authentifizierungsebene.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindung, die zuvor mit ldap_connect() erstellt wurde. Ab PHP 8.1 ist dies ein LDAP\Connection-Objekt (davor: resource).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verbindung erfolgreich getrennt wurde, oder false bei einem Fehler.

Beispiele

Einfache LDAP-Verbindung trennen

<?php
$ldap = ldap_connect('ldap://ldap.example.com');

if ($ldap === false) {
    die('Verbindung zum LDAP-Server fehlgeschlagen.');
}

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

if (ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort')) {
    echo 'Erfolgreich angemeldet.' . PHP_EOL;

    // ... LDAP-Operationen durchführen ...

    if (ldap_unbind($ldap)) {
        echo 'Verbindung erfolgreich getrennt.' . PHP_EOL;
    } else {
        echo 'Fehler beim Trennen der Verbindung.' . PHP_EOL;
    }
} else {
    echo 'Anmeldung fehlgeschlagen.' . PHP_EOL;
}
Erfolgreich angemeldet. Verbindung erfolgreich getrennt.

LDAP-Verbindung mit try/finally sauber schließen

<?php
$ldap = ldap_connect('ldap://ldap.example.com');

if ($ldap === false) {
    throw new RuntimeException('LDAP-Verbindung konnte nicht hergestellt werden.');
}

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=readonly,dc=example,dc=com', 'passwort');

try {
    $result = ldap_search($ldap, 'dc=example,dc=com', '(uid=mustermann)');
    $entries = ldap_get_entries($ldap, $result);

    foreach ($entries as $entry) {
        if (isset($entry['cn'][0])) {
            echo 'Gefunden: ' . $entry['cn'][0] . PHP_EOL;
        }
    }
} finally {
    // Verbindung wird in jedem Fall getrennt – auch bei Ausnahmen
    ldap_unbind($ldap);
    echo 'LDAP-Verbindung wurde geschlossen.' . PHP_EOL;
}
Gefunden: Max Mustermann LDAP-Verbindung wurde geschlossen.

// Wichtig · Fallstricke

Ressourcenmanagement: Nach dem Aufruf von ldap_unbind() darf das LDAP\Connection-Objekt nicht mehr für weitere LDAP-Operationen verwendet werden. Versuche, dies zu tun, führen zu Fehlern oder Warnungen.

Unterschied zu ldap_bind(): Obwohl der Name es suggerieren könnte, ist ldap_unbind() kein reines Gegenstück zu ldap_bind(). Während ldap_bind() nur die Authentifizierungsebene betrifft, schließt ldap_unbind() die gesamte Verbindung. Ein erneutes Binden auf derselben Verbindung ist nach ldap_unbind() nicht möglich.

PHP 8.1+: Ab PHP 8.1 wurde der interne resource-Typ durch das dedizierte Klassen-Objekt LDAP\Connection ersetzt. Code, der den alten resource-Typ erwartet, muss entsprechend angepasst werden.