Start · Sprachen · PHP · Referenz · ldap_next_reference

ldap_next_reference

Funktion

Holt den nächsten Referenz-Eintrag aus einem LDAP-Suchergebnis, nachdem <code>ldap_first_reference()</code> aufgerufen wurde.

seit PHP 4.0.5 Kategorie: misc

Signatur

ldap_next_reference(LDAP\Connection $ldap, LDAP\ResultEntry $entry): LDAP\ResultEntry|false

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

Typ
LDAP\ResultEntry|false
Beschreibung
Gibt den nächsten Referenz-Eintrag als 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);
Referral-URL: ldap://other.example.com/dc=other,dc=example,dc=com

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);
Anzahl der Referenz-Einträge: 2

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