Signatur
Beschreibung
ldap_get_entries() wandelt ein LDAP-Ergebnis-Ressource (erzeugt durch ldap_search(), ldap_list() oder ldap_read()) in ein vollständiges PHP-Array um. Das zurückgegebene Array enthält alle gefundenen Einträge mit ihren Attributen und Werten, sodass keine weitere LDAP-spezifische Traversierung (z. B. über ldap_first_entry()/ldap_next_entry()) notwendig ist.
Das Ergebnis-Array ist numerisch indiziert, wobei der Schlüssel 'count' die Anzahl der Einträge enthält. Jeder Eintrag ist selbst ein assoziatives Array, dessen Schlüssel die klein geschriebenen Attributnamen sind. Für jedes Attribut existiert ebenfalls ein 'count'-Schlüssel, der die Anzahl der Werte angibt.
Diese Funktion eignet sich besonders, wenn alle Ergebnisse auf einmal benötigt werden, z. B. bei der Benutzersuche im Verzeichnis oder beim Einlesen kleiner bis mittelgroßer Ergebnismengen. Bei sehr großen Ergebnismengen kann die Traversierung über ldap_first_entry() und ldap_next_entry() speicherschonender sein.
Seit PHP 8.1 sind die Parameter als LDAP\Connection- bzw. LDAP\Result-Objekte typisiert; in älteren Versionen wurden resource-Typen verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindung, wie sie von ldap_connect() zurückgegeben wird. |
|
| $result Pflicht | LDAP\Result | Ein LDAP-Ergebnisobjekt, das durch ldap_search(), ldap_list() oder ldap_read() erzeugt wurde. |
Rückgabewert
'count' auf oberster Ebene enthält die Gesamtzahl der Einträge. Schlägt die Funktion fehl, wird false zurückgegeben.Beispiele
Benutzersuche im LDAP-Verzeichnis
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
if (!$ldap) {
die('Verbindung fehlgeschlagen');
}
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
if (!ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort')) {
die('Bind fehlgeschlagen: ' . ldap_error($ldap));
}
$baseDn = 'ou=users,dc=example,dc=com';
$filter = '(objectClass=inetOrgPerson)';
$attribs = ['cn', 'mail', 'uid'];
$result = ldap_search($ldap, $baseDn, $filter, $attribs);
if (!$result) {
die('Suche fehlgeschlagen: ' . ldap_error($ldap));
}
$entries = ldap_get_entries($ldap, $result);
echo 'Gefundene Einträge: ' . $entries['count'] . PHP_EOL;
for ($i = 0; $i < $entries['count']; $i++) {
$cn = $entries[$i]['cn'][0] ?? '–';
$mail = $entries[$i]['mail'][0] ?? '–';
$uid = $entries[$i]['uid'][0] ?? '–';
echo "Benutzer: $cn | E-Mail: $mail | UID: $uid" . PHP_EOL;
}
ldap_unbind($ldap);
Struktur des Rückgabe-Arrays inspizieren
<?php
// Angenommen, $ldap und $result wurden bereits korrekt erstellt
$entries = ldap_get_entries($ldap, $result);
// Anzahl der Ergebnisse
echo 'Einträge gesamt: ' . $entries['count'] . PHP_EOL;
if ($entries['count'] > 0) {
$ersterEintrag = $entries[0];
// DN des ersten Eintrags
echo 'DN: ' . $ersterEintrag['dn'] . PHP_EOL;
// Alle Attributnamen ausgeben
echo 'Attribute (' . $ersterEintrag['count'] . '):' . PHP_EOL;
for ($a = 0; $a < $ersterEintrag['count']; $a++) {
$attrName = $ersterEintrag[$a];
echo ' ' . $attrName . ': ';
for ($v = 0; $v < $ersterEintrag[$attrName]['count']; $v++) {
echo $ersterEintrag[$attrName][$v] . ' ';
}
echo PHP_EOL;
}
}
// Wichtig · Fallstricke
Attributnamen werden immer in Kleinbuchstaben zurückgegeben, unabhängig davon, wie sie im Verzeichnis gespeichert sind. Beim Zugriff auf Attributwerte muss dies berücksichtigt werden.
Speicherverbrauch: ldap_get_entries() lädt alle Einträge auf einmal in den Arbeitsspeicher. Bei sehr großen Ergebnismengen (tausende Einträge) sollte stattdessen die manuelle Traversierung mit ldap_first_entry() und ldap_next_entry() erwogen werden.
Sicherheit: Benutzereingaben, die in LDAP-Filtern verwendet werden, müssen mit ldap_escape() maskiert werden, um LDAP-Injection-Angriffe zu verhindern. ldap_get_entries() selbst ist davon nicht betroffen, aber die vorgelagerte Suche schon.
In PHP 8.1 wurden die bisherigen resource-Typen durch LDAP\Connection und LDAP\Result ersetzt. Code, der noch mit alten resource-Rückgaben arbeitet, sollte entsprechend angepasst werden.