Start · Sprachen · PHP · Referenz · ldap_next_entry

ldap_next_entry

Funktion

Liefert den nächsten Eintrag in einer LDAP-Ergebnisliste nach dem angegebenen Eintrag.

seit PHP 4.0.0 Kategorie: misc

Signatur

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

Beschreibung

ldap_next_entry() wird verwendet, um durch eine LDAP-Ergebnismenge zu iterieren. Die Funktion gibt den Eintrag zurück, der in der Ergebnisliste unmittelbar auf den übergebenen Eintrag folgt. In Kombination mit ldap_first_entry() ermöglicht sie das vollständige Durchlaufen aller Einträge eines LDAP-Suchergebnisses.

Der typische Einsatz ist eine for- oder while-Schleife: Zuerst wird mit ldap_first_entry() der erste Eintrag geholt, anschließend wird in jeder Iteration ldap_next_entry() aufgerufen, bis der Rückgabewert false ist und somit das Ende der Liste signalisiert wird.

Die Funktion eignet sich besonders dann, wenn eine manuelle, schrittweise Verarbeitung einzelner LDAP-Einträge notwendig ist – etwa wenn Einträge gefiltert oder transformiert werden sollen, ohne sie alle auf einmal in ein Array zu laden (wie es ldap_get_entries() tun würde).

Ab PHP 8.1 werden die LDAP-Ressourcen durch die Klassen LDAP\Connection, LDAP\Result und LDAP\ResultEntry repräsentiert, anstatt durch generische Ressource-Typen.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsinstanz, die mit ldap_connect() erstellt wurde.
$entry Pflicht LDAP\ResultEntry Der aktuelle LDAP-Ergebniseintrag, dessen Nachfolger zurückgegeben werden soll. Üblicherweise der Rückgabewert von ldap_first_entry() oder einem vorherigen Aufruf von ldap_next_entry().

Rückgabewert

Typ
LDAP\ResultEntry|false
Beschreibung
Gibt das nächste LDAP\ResultEntry-Objekt zurück, wenn ein weiterer Eintrag vorhanden ist. Gibt false zurück, wenn kein weiterer Eintrag in der Ergebnismenge vorhanden ist oder ein Fehler aufgetreten ist.

Beispiele

Alle LDAP-Einträge mit ldap_first_entry und ldap_next_entry durchlaufen

<?php
$ldap = ldap_connect('ldap://ldap.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=inetOrgPerson)', ['cn', 'mail']);

if ($result) {
    $entry = ldap_first_entry($ldap, $result);

    while ($entry !== false) {
        $cn   = ldap_get_values($ldap, $entry, 'cn')[0]  ?? '(unbekannt)';
        $mail = ldap_get_values($ldap, $entry, 'mail')[0] ?? '(keine E-Mail)';
        echo "Name: $cn, E-Mail: $mail\n";

        $entry = ldap_next_entry($ldap, $entry);
    }
}

ldap_unbind($ldap);
?>
Name: Max Mustermann, E-Mail: max@example.com Name: Erika Mustermann, E-Mail: erika@example.com

Einträge zählen und selektiv verarbeiten

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

$result = ldap_search($ldap, 'ou=users,dc=example,dc=com', '(objectClass=posixAccount)', ['uid', 'uidNumber']);

$adminEntries = [];

for (
    $entry = ldap_first_entry($ldap, $result);
    $entry !== false;
    $entry = ldap_next_entry($ldap, $entry)
) {
    $uidNumber = (int) (ldap_get_values($ldap, $entry, 'uidNumber')[0] ?? PHP_INT_MAX);

    // Nur Systembenutzer (UID < 1000) sammeln
    if ($uidNumber < 1000) {
        $adminEntries[] = ldap_get_values($ldap, $entry, 'uid')[0];
    }
}

echo "Systembenutzer: " . implode(', ', $adminEntries) . "\n";

ldap_unbind($ldap);
?>
Systembenutzer: root, daemon, nobody

// Wichtig · Fallstricke

Ressourcen vs. Objekte: Vor PHP 8.1 waren die Parameter und Rückgabewerte generische resource-Typen. Ab PHP 8.1 werden typisierte Objekte (LDAP\Connection, LDAP\ResultEntry) verwendet. Bestehender Code, der auf Ressourcen prüft, sollte angepasst werden.

Alternativer Ansatz: Für einfache Anwendungsfälle kann ldap_get_entries() bequemer sein, da es alle Einträge auf einmal als assoziatives Array zurückgibt. ldap_next_entry() ist hingegen sinnvoll, wenn Speichereffizienz oder sequenzielle Verarbeitung erforderlich ist.

Fehlerbehandlung: Wenn ldap_next_entry() false zurückgibt, kann mit ldap_error() oder ldap_errno() geprüft werden, ob tatsächlich ein Fehler aufgetreten ist oder ob schlicht das Ende der Liste erreicht wurde.