Signatur
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
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);
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);
// 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.