Start · Sprachen · PHP · Referenz · ldap_delete_ext

ldap_delete_ext

Funktion

Löscht einen Eintrag aus einem LDAP-Verzeichnis und gibt ein <code>LDAP\Result</code>-Objekt zurück, das eine erweiterte Auswertung der Server-Antwort ermöglicht.

seit PHP 8.0.0 Kategorie: misc

Signatur

ldap_delete_ext(LDAP\Connection $ldap, string $dn, array $controls = []): LDAP\Result|false

Beschreibung

ldap_delete_ext sendet eine asynchrone Löschanfrage an den LDAP-Server für den angegebenen Distinguished Name (DN). Im Gegensatz zu ldap_delete wartet die Funktion nicht auf die vollständige Server-Antwort und gibt stattdessen ein LDAP\Result-Objekt zurück, mit dem Server-Controls und weitere Ergebnisinformationen ausgewertet werden können.

Die Funktion ist besonders nützlich, wenn Server-seitige LDAP-Controls (z. B. der Tree-Delete-Control) übergeben oder ausgelesen werden müssen. Über das zurückgegebene LDAP\Result-Objekt lassen sich mit ldap_parse_result Fehlercode, gematchter DN sowie zurückgelieferte Controls des Servers ermitteln.

Wichtig: Der zu löschende Eintrag darf keine untergeordneten Einträge (Child-Einträge) haben, sofern kein passender Server-Control (z. B. LDAP_CONTROL_SUBTREE_DELETE) übergeben wird. Andernfalls schlägt der Löschvorgang mit einem Fehler fehl.

Zur Nutzung dieser Funktion muss eine aktive, authentifizierte Verbindung zum LDAP-Server bestehen, die über ldap_connect und ldap_bind hergestellt wurde.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsressource, die zuvor mit ldap_connect und ldap_bind erstellt wurde.
$dn Pflicht string Der vollständige Distinguished Name (DN) des Eintrags, der aus dem Verzeichnis gelöscht werden soll, z. B. cn=Max Mustermann,ou=users,dc=example,dc=com.
$controls array [] Ein Array von LDAP-Controls, die mit der Anfrage an den Server gesendet werden. Nützlich z. B. für den Subtree-Delete-Control (LDAP_CONTROL_SUBTREE_DELETE), um ganze Teilbäume zu löschen.

Rückgabewert

Typ
LDAP\Result|false
Beschreibung
Gibt bei Erfolg ein LDAP\Result-Objekt zurück, das mit ldap_parse_result ausgewertet werden kann. Bei einem Fehler (z. B. fehlende Berechtigung, Verbindungsproblem) wird false zurückgegeben.

Beispiele

Einfachen LDAP-Eintrag löschen und Ergebnis auswerten

<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');

$dn = 'cn=Max Mustermann,ou=users,dc=example,dc=com';

$result = ldap_delete_ext($ldap, $dn);

if ($result === false) {
    echo 'Fehler beim Senden der Löschanfrage: ' . ldap_error($ldap);
} else {
    // Ergebnis vom Server auswerten
    ldap_parse_result($ldap, $result, $errcode, $matcheddn, $errmsg, $referrals, $controls);
    if ($errcode === LDAP_SUCCESS) {
        echo 'Eintrag erfolgreich gelöscht.';
    } else {
        echo 'Serverfehler ' . $errcode . ': ' . $errmsg;
    }
}

ldap_unbind($ldap);
Eintrag erfolgreich gelöscht.

Gesamten Teilbaum mit Subtree-Delete-Control löschen

<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');

$dn = 'ou=abteilung,dc=example,dc=com';

// Subtree-Delete-Control hinzufügen, um auch Child-Einträge zu löschen
$controls = [
    [
        'oid'      => LDAP_CONTROL_SUBTREE_DELETE,
        'iscritical' => true,
    ]
];

$result = ldap_delete_ext($ldap, $dn, $controls);

if ($result === false) {
    echo 'Fehler: ' . ldap_error($ldap);
} else {
    ldap_parse_result($ldap, $result, $errcode, $matcheddn, $errmsg, $referrals, $serverControls);
    if ($errcode === LDAP_SUCCESS) {
        echo 'Teilbaum "' . $dn . '" erfolgreich gelöscht.';
    } else {
        echo 'Serverfehler ' . $errcode . ': ' . $errmsg;
    }
}

ldap_unbind($ldap);
Teilbaum "ou=abteilung,dc=example,dc=com" erfolgreich gelöscht.

// Wichtig · Fallstricke

Berechtigungen: Der verwendete Bind-DN muss über ausreichende Schreibrechte im LDAP-Verzeichnis verfügen, um Einträge löschen zu dürfen. Andernfalls schlägt der Vorgang mit einem Insufficient Access Rights-Fehler fehl.

Nicht-leere Einträge: Ein Eintrag mit Child-Einträgen kann ohne den LDAP_CONTROL_SUBTREE_DELETE-Control nicht gelöscht werden. Viele LDAP-Server (z. B. OpenLDAP) unterstützen diesen Control jedoch möglicherweise nicht standardmäßig.

Unterschied zu ldap_delete: ldap_delete wartet synchron auf die Server-Antwort und gibt true/false zurück, während ldap_delete_ext ein LDAP\Result-Objekt liefert, das eine detailliertere Auswertung inklusive Server-Controls ermöglicht.