Start · Sprachen · PHP · Referenz · ldap_get_entries

ldap_get_entries

Funktion

Liest alle Einträge aus einem LDAP-Suchergebnis und gibt sie als strukturiertes Array zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_get_entries(LDAP\Connection $ldap, LDAP\Result $result): array|false

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

Typ
array|false
Beschreibung
Gibt ein mehrdimensionales Array mit allen gefundenen LDAP-Einträgen zurück. Der Schlüssel '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);
Gefundene Einträge: 3 Benutzer: Max Mustermann | E-Mail: max@example.com | UID: mmustermann Benutzer: Erika Muster | E-Mail: erika@example.com | UID: emuster Benutzer: John Doe | E-Mail: john@example.com | UID: jdoe

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;
    }
}
Einträge gesamt: 1 DN: cn=Max Mustermann,ou=users,dc=example,dc=com Attribute (3): cn: Max Mustermann mail: max@example.com uid: mmustermann

// 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.