Start · Sprachen · PHP · Referenz · ldap_first_reference

ldap_first_reference

Funktion

Gibt den ersten Referenz-Eintrag aus einem LDAP-Suchergebnis zurück, um LDAP-Referenzen (Referrals) zu durchlaufen.

seit PHP 4.0.5 Kategorie: misc

Signatur

ldap_first_reference(LDAP\Connection $ldap, LDAP\Result $result): LDAP\ResultEntry|false

Beschreibung

ldap_first_reference() extrahiert den ersten Referenz-Eintrag aus einem LDAP-Ergebnis-Objekt. LDAP-Referenzen (auch Referrals genannt) sind spezielle Einträge im Suchergebnis, die auf andere LDAP-Verzeichnisse oder Teilbäume verweisen. Sie unterscheiden sich von normalen Einträgen und werden mit eigenen Funktionen traversiert.

Diese Funktion ist der Einstiegspunkt für die Iteration über LDAP-Referenzen, analog zu ldap_first_entry() für normale Einträge. Mit ldap_next_reference() kann man anschließend die weiteren Referenzen abrufen.

Typischer Anwendungsfall ist das Auswerten von LDAP-Suchergebnissen in verteilten Verzeichnisumgebungen, bei denen der Server nicht alle Informationen selbst hält, sondern auf andere Server verweist. In solchen Umgebungen sollte man sowohl Einträge als auch Referenzen verarbeiten.

Gibt das zurückgegebene LDAP\ResultEntry-Objekt an ldap_parse_reference() weiter, um die eigentlichen Referral-URLs auszulesen.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine aktive LDAP-Verbindungsressource, die mit ldap_connect() und anschließendem ldap_bind() erstellt wurde.
$result Pflicht LDAP\Result Das LDAP-Ergebnisobjekt, das von Suchfunktionen wie ldap_search(), ldap_list() oder ldap_read() zurückgegeben wurde.

Rückgabewert

Typ
LDAP\ResultEntry|false
Beschreibung
Gibt ein LDAP\ResultEntry-Objekt zurück, das die erste Referenz im Suchergebnis repräsentiert. Gibt false zurück, wenn keine Referenzen im Ergebnis vorhanden sind oder ein Fehler auftritt.

Beispiele

Alle LDAP-Referenzen eines Suchergebnisses durchlaufen

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

$result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=*)');

// Erste Referenz holen
$ref = ldap_first_reference($ldap, $result);

if ($ref === false) {
    echo "Keine Referenzen im Ergebnis gefunden.\n";
} else {
    do {
        $referrals = [];
        if (ldap_parse_reference($ldap, $ref, $referrals)) {
            foreach ($referrals as $url) {
                echo "Referral-URL: " . $url . "\n";
            }
        }
    } while ($ref = ldap_next_reference($ldap, $ref));
}

ldap_unbind($ldap);
Referral-URL: ldap://other.example.com/dc=other,dc=example,dc=com

Kombinierte Verarbeitung von Einträgen und Referenzen

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

$result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=organizationalUnit)');

// Normale Einträge verarbeiten
$count = ldap_count_entries($ldap, $result);
echo "Gefundene Einträge: $count\n";

// Referenzen verarbeiten
$ref = ldap_first_reference($ldap, $result);
if ($ref !== false) {
    $refCount = 0;
    do {
        $refCount++;
        $referrals = [];
        ldap_parse_reference($ldap, $ref, $referrals);
        echo "Referenz $refCount verweist auf: " . implode(', ', $referrals) . "\n";
    } while ($ref = ldap_next_reference($ldap, $ref));
} else {
    echo "Keine Referenzen vorhanden.\n";
}

ldap_unbind($ldap);
Gefundene Einträge: 3 Keine Referenzen vorhanden.

// Wichtig · Fallstricke

PHP-Versionen: Ab PHP 8.1 werden LDAP\Connection und LDAP\Result als eigene Klassen verwendet. In älteren PHP-Versionen (vor 8.1) waren dies einfache Ressourcen (resource).

LDAP_OPT_REFERRALS: Damit Referenzen überhaupt im Ergebnis erscheinen, muss die LDAP-Option LDAP_OPT_REFERRALS aktiviert sein (Standard ist 1/aktiviert). Wenn diese Option deaktiviert ist (ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0)), verfolgt der Client keine Referrals und ldap_first_reference() wird stets false zurückgeben.

Verteilte Verzeichnisse: In produktiven Umgebungen mit verteilten LDAP-Verzeichnissen sollte man Referenzen immer auswerten, um vollständige Ergebnisse zu erhalten. Das Ignorieren von Referenzen kann zu unvollständigen Suchergebnissen führen.