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