Start · Sprachen · PHP · Referenz · ldap_get_attributes

ldap_get_attributes

Funktion

Liest alle Attribute und deren Werte aus einem einzelnen LDAP-Ergebniseintrag und gibt sie als assoziatives Array zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_get_attributes(LDAP\Connection $ldap, LDAP\ResultEntry $entry): array

Beschreibung

ldap_get_attributes() liest sämtliche Attribute eines einzelnen LDAP-Eintrags, der zuvor durch eine Such-Funktion wie ldap_search() oder ldap_read() ermittelt wurde. Das Ergebnis ist ein verschachteltes assoziatives Array, das für jedes Attribut einen Schlüssel enthält, dessen Wert wiederum ein numerisch-indiziertes Array der zugehörigen Attributwerte ist.

Das zurückgegebene Array enthält zusätzlich den Schlüssel count auf der obersten Ebene, der die Gesamtanzahl der gefundenen Attribute angibt. Ebenso besitzt jedes Attribut-Array einen count-Eintrag, der die Anzahl der Werte für dieses Attribut beschreibt. Die Attributnamen sind im Array in Kleinschreibung normiert.

Die Funktion ist besonders nützlich, wenn die konkreten Attributnamen eines LDAP-Eintrags nicht im Voraus bekannt sind oder wenn alle vorhandenen Attribute dynamisch ausgelesen werden sollen, beispielsweise beim Erkunden eines LDAP-Verzeichnisses oder beim Debugging.

Für den gezielten Zugriff auf einzelne Attribute empfiehlt sich hingegen ldap_get_values(), das effizienter arbeitet, wenn der Attributname bereits bekannt ist.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsressource, die zuvor mit ldap_connect() erzeugt und mit ldap_bind() authentifiziert wurde.
$entry Pflicht LDAP\ResultEntry Ein einzelner LDAP-Ergebniseintrag, der z. B. durch ldap_first_entry() oder ldap_next_entry() aus einem Suchergebnis gewonnen wurde.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array zurück, das alle Attribute des Eintrags enthält. Die Schlüssel entsprechen den Attributnamen (in Kleinschreibung), die Werte sind numerisch-indizierte Arrays der jeweiligen Attributwerte. Zusätzlich enthält das Array einen count-Schlüssel mit der Anzahl der Attribute sowie pro Attribut ebenfalls einen count-Eintrag. Bei einem Fehler wird false zurückgegeben.

Beispiele

Alle Attribute eines LDAP-Eintrags ausgeben

<?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', '(uid=mustermann)');
$entry  = ldap_first_entry($ldap, $result);

if ($entry !== false) {
    $attributes = ldap_get_attributes($ldap, $entry);
    echo 'Anzahl der Attribute: ' . $attributes['count'] . PHP_EOL;

    for ($i = 0; $i < $attributes['count']; $i++) {
        $attrName = $attributes[$i];
        echo $attrName . ' (' . $attributes[$attrName]['count'] . ' Wert(e)):' . PHP_EOL;
        for ($j = 0; $j < $attributes[$attrName]['count']; $j++) {
            echo '  ' . $attributes[$attrName][$j] . PHP_EOL;
        }
    }
}

ldap_unbind($ldap);
Anzahl der Attribute: 5 uid (1 Wert(e)): mustermann cn (1 Wert(e)): Max Mustermann mail (1 Wert(e)): max@example.com ...

Alle Einträge einer LDAP-Suche mit Attributen 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, 'ou=users,dc=example,dc=com', '(objectClass=person)');

$benutzer = [];
$entry = ldap_first_entry($ldap, $result);

while ($entry !== false) {
    $attributes = ldap_get_attributes($ldap, $entry);
    $datensatz  = [];

    foreach (['uid', 'cn', 'mail'] as $feld) {
        if (isset($attributes[$feld])) {
            $datensatz[$feld] = $attributes[$feld][0];
        }
    }

    $benutzer[] = $datensatz;
    $entry = ldap_next_entry($ldap, $entry);
}

print_r($benutzer);

ldap_unbind($ldap);
Array ( [0] => Array ( [uid] => mustermann [cn] => Max Mustermann [mail] => max@example.com ) ... )

// Wichtig · Fallstricke

Ressource vs. Objekt: Seit PHP 8.1 werden LDAP-Verbindungen und Ergebniseinträge als LDAP\Connection- bzw. LDAP\ResultEntry-Objekte statt als Ressourcen repräsentiert. Der Code funktioniert jedoch prinzipiell gleich.

Groß-/Kleinschreibung: LDAP-Attributnamen werden im Rückgabe-Array immer in Kleinschreibung geliefert (uid, nicht UID), unabhängig davon, wie sie im Verzeichnis gespeichert sind.

Datenschutz: LDAP-Verbindungen übertragen Daten standardmäßig unverschlüsselt. Für den Produktionseinsatz sollte LDAPS (ldaps://) oder STARTTLS via ldap_start_tls() verwendet werden.

Binäre Attribute: Binäre Attributwerte (z. B. jpegPhoto oder userCertificate) werden als rohe Byte-Strings zurückgegeben und müssen ggf. separat verarbeitet werden.