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