Start · Sprachen · PHP · Referenz · ldap_count_references

ldap_count_references

Funktion

Zählt die Anzahl der Referenzen (Referral-Einträge) in einem LDAP-Suchergebnis.

seit PHP 8.0.0 Kategorie: misc

Signatur

ldap_count_references(LDAP\Result $result): int

Beschreibung

ldap_count_references() ermittelt die Anzahl der Referenz-Einträge (Referrals) in einem LDAP-Ergebnis-Objekt, das zuvor durch eine Suchoperation wie ldap_search(), ldap_list() oder ldap_read() erzeugt wurde. LDAP-Referenzen (Referrals) zeigen auf andere Verzeichnisknoten oder Server und sind von den eigentlichen Ergebnis-Einträgen zu unterscheiden.

In verteilten LDAP-Verzeichnissen kann ein Server bei einer Suchanfrage nicht nur direkte Treffer, sondern auch Verweise auf andere Teile des Verzeichnisbaums zurückliefern. Mit ldap_count_references() lässt sich schnell prüfen, ob solche Referenzen im Suchergebnis enthalten sind, bevor man sie mit ldap_first_reference() und ldap_next_reference() iteriert.

Die Funktion ist besonders nützlich, wenn man sicherstellen möchte, dass alle relevanten Teile eines verteilten Verzeichnisses abgedeckt wurden, oder wenn man Referenzen gezielt auswerten und weiterverfolgen will. Sie ergänzt ldap_count_entries(), das die Anzahl der eigentlichen Ergebnis-Einträge zurückgibt.

Parameter

Name Typ Default Beschreibung
$result Pflicht LDAP\Result Ein LDAP\Result-Objekt, das von einer LDAP-Suchfunktion wie ldap_search() oder ldap_list() zurückgegeben wurde.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der Referenz-Einträge (Referrals) im Suchergebnis als int zurück. Sind keine Referenzen vorhanden, wird 0 zurückgegeben.

Beispiele

Referenzen im LDAP-Suchergebnis zählen

<?php
$ds = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

if (ldap_bind($ds, 'cn=admin,dc=example,dc=com', 'geheimesPasswort')) {
    $result = ldap_search($ds, 'dc=example,dc=com', '(objectClass=person)');

    $anzahlEintraege   = ldap_count_entries($ds, $result);
    $anzahlReferenzen  = ldap_count_references($result);

    echo "Gefundene Einträge:  $anzahlEintraege" . PHP_EOL;
    echo "Gefundene Referenzen: $anzahlReferenzen" . PHP_EOL;
}

ldap_unbind($ds);
?>
Gefundene Einträge: 42 Gefundene Referenzen: 2

Referenzen prüfen und iterieren

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

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

$anzahlReferenzen = ldap_count_references($result);
echo "Anzahl der Referenzen: $anzahlReferenzen" . PHP_EOL;

if ($anzahlReferenzen > 0) {
    $ref = ldap_first_reference($ds, $result);
    while ($ref !== false) {
        // Referenz-URLs auslesen
        ldap_parse_reference($ds, $ref, $referrals);
        foreach ($referrals as $url) {
            echo "Referral-URL: $url" . PHP_EOL;
        }
        $ref = ldap_next_reference($ds, $ref);
    }
}

ldap_unbind($ds);
?>
Anzahl der Referenzen: 1 Referral-URL: ldap://other.example.com/dc=other,dc=example,dc=com

// Wichtig · Fallstricke

Hinweis zur Versionsgeschichte: Vor PHP 8.0 akzeptierte die Funktion eine Ressource vom Typ resource anstelle des LDAP\Result-Objekts. Ab PHP 8.0 wurde auf das objektorientierte Modell umgestellt.

Referrals vs. Einträge: Referenzen (Referrals) sind keine gewöhnlichen Verzeichnis-Einträge und werden von ldap_count_entries() nicht gezählt. Wenn in einem verteilten Verzeichnis Daten auf anderen Servern liegen, kann das Ignorieren von Referenzen zu unvollständigen Suchergebnissen führen.

Referral-Verfolgung: Um Referenzen automatisch zu verfolgen, kann die LDAP-Option LDAP_OPT_REFERRALS mit ldap_set_option() aktiviert werden. In diesem Fall löst die LDAP-Bibliothek Referenzen selbstständig auf und sie erscheinen möglicherweise nicht im Ergebnis.