Signatur
Beschreibung
ldap_next_reference() wird zusammen mit ldap_first_reference() verwendet, um alle Referenz-Einträge eines LDAP-Suchergebnisses zu iterieren. LDAP-Referenzen (auch Referral genannt) sind spezielle Einträge, die auf andere LDAP-Server oder Verzeichnisbäume verweisen und z. B. bei verteilten Verzeichnisdiensten auftreten.
Der typische Ablauf ist: Zunächst wird mit ldap_search() eine Suche durchgeführt. Danach holt man mit ldap_first_reference() den ersten Referenz-Eintrag und iteriert anschließend mit ldap_next_reference() über alle weiteren, bis false zurückgegeben wird.
Mit ldap_parse_reference() können die eigentlichen Referral-URLs aus einem solchen Referenz-Eintrag extrahiert werden. Dies ist nützlich, wenn eine Anwendung auf die Ziele der Verweise reagieren oder diese protokollieren soll, anstatt ihnen automatisch zu folgen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die von ldap_connect() zurückgegeben wurde. |
|
| $entry Pflicht | LDAP\ResultEntry | Der aktuelle Referenz-Eintrag, der zuvor von ldap_first_reference() oder einem vorangegangenen Aufruf von ldap_next_reference() zurückgegeben wurde. |
Rückgabewert
LDAP\ResultEntry-Objekt zurück, oder false, wenn kein weiterer Referenz-Eintrag vorhanden ist.Beispiele
Alle Referenz-Einträge eines Suchergebnisses durchlaufen
<?php
$ldap = ldap_connect('ldap://directory.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
// Anonymes Binden (oder mit Credentials)
ldap_bind($ldap);
$result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=*)');
if ($result) {
// Ersten Referenz-Eintrag holen
$ref = ldap_first_reference($ldap, $result);
while ($ref !== false) {
$urls = [];
if (ldap_parse_reference($ldap, $ref, $urls)) {
foreach ($urls as $url) {
echo 'Referral-URL: ' . $url . PHP_EOL;
}
}
// Zum nächsten Referenz-Eintrag wechseln
$ref = ldap_next_reference($ldap, $ref);
}
}
ldap_unbind($ldap);
Referenzen zählen
<?php
$ldap = ldap_connect('ldap://directory.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap);
$result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=*)');
$count = 0;
if ($result) {
$ref = ldap_first_reference($ldap, $result);
while ($ref !== false) {
$count++;
$ref = ldap_next_reference($ldap, $ref);
}
}
echo 'Anzahl der Referenz-Einträge: ' . $count . PHP_EOL;
ldap_unbind($ldap);
// Wichtig · Fallstricke
Hinweis zur PHP-Version: Vor PHP 8.1 wurden LDAP-Verbindungen und -Ergebnisse als resource-Typ behandelt. Ab PHP 8.1 werden dedizierte Klassen (LDAP\Connection, LDAP\ResultEntry) verwendet.
Referenzen vs. reguläre Einträge: Referenz-Einträge sind von normalen Daten-Einträgen zu unterscheiden. Für normale Einträge werden ldap_first_entry() und ldap_next_entry() verwendet. Wenn LDAP-Referenzen automatisch verfolgt werden sollen, kann die Option LDAP_OPT_REFERRALS gesetzt werden.
Verfügbarkeit: Diese Funktion steht nur zur Verfügung, wenn PHP mit LDAP-Unterstützung kompiliert wurde (d. h. mit der --with-ldap-Option).