Start · Sprachen · PHP · Referenz · ldap_get_values

ldap_get_values

Funktion

Liest alle Werte eines bestimmten Attributs aus einem LDAP-Ergebniseintrag und gibt sie als Array zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_get_values(LDAP\Connection $ldap, LDAP\ResultEntry $entry, string $attribute): array|false

Beschreibung

ldap_get_values() extrahiert sämtliche Werte eines einzelnen Attributs aus einem LDAP-Ergebniseintrag. Die Funktion wird typischerweise nach ldap_search() oder ldap_read() eingesetzt, wenn man gezielt den Inhalt eines Attributs (z. B. mail, cn oder memberOf) auslesen möchte.

Der Rückgabewert ist ein numerisch indiziertes Array mit den Attributwerten. Zusätzlich enthält das Array den Schlüssel count, der die Anzahl der enthaltenen Werte angibt. Für Attribute mit mehreren Werten (Multi-Value-Attribute, z. B. Gruppenmitgliedschaften) sind alle Werte im Array enthalten.

Wichtig: Die Funktion arbeitet mit Textwerten. Für binäre Attributwerte (z. B. jpegPhoto oder Zertifikate) sollte stattdessen ldap_get_values_len() verwendet werden, da diese Funktion binäre Daten korrekt verarbeitet.

Ein typischer Ablauf ist: Verbindung aufbauen → Binden → Suchen → Erster Eintrag mit ldap_first_entry() oder Iteration → Attributwerte mit ldap_get_values() abrufen.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine aktive LDAP-Verbindungsressource, die von ldap_connect() zurückgegeben wurde.
$entry Pflicht LDAP\ResultEntry Ein einzelner Ergebniseintrag, der von Funktionen wie ldap_first_entry() oder ldap_next_entry() zurückgegeben wurde.
$attribute Pflicht string Der Name des auszulesenden Attributs, z. B. 'mail', 'cn' oder 'memberOf'. Die Groß-/Kleinschreibung wird in der Regel ignoriert.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den Attributwerten zurück. Der Schlüssel count enthält die Anzahl der Werte; die eigentlichen Werte sind unter den numerischen Indizes 0, 1, … gespeichert. Wird das Attribut im Eintrag nicht gefunden oder tritt ein Fehler auf, wird false zurückgegeben.

Beispiele

E-Mail-Adressen eines LDAP-Benutzers auslesen

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

if ($entry !== false) {
    $mails = ldap_get_values($ldap, $entry, 'mail');
    if ($mails !== false) {
        echo 'Anzahl E-Mail-Adressen: ' . $mails['count'] . PHP_EOL;
        for ($i = 0; $i < $mails['count']; $i++) {
            echo 'Mail ' . ($i + 1) . ': ' . $mails[$i] . PHP_EOL;
        }
    }
}

ldap_unbind($ldap);
Anzahl E-Mail-Adressen: 1 Mail 1: jdoe@example.com

Alle Gruppen eines Benutzers iterieren (Multi-Value-Attribut)

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

if ($entry !== false) {
    $groups = ldap_get_values($ldap, $entry, 'memberOf');
    if ($groups !== false && $groups['count'] > 0) {
        echo 'Gruppenmitgliedschaften:' . PHP_EOL;
        foreach (array_slice($groups, 0, $groups['count']) as $group) {
            echo '  - ' . $group . PHP_EOL;
        }
    } else {
        echo 'Keine Gruppenmitgliedschaften gefunden.' . PHP_EOL;
    }
}

ldap_unbind($ldap);
Gruppenmitgliedschaften: - CN=Entwickler,OU=Gruppen,DC=example,DC=com - CN=VPN-Nutzer,OU=Gruppen,DC=example,DC=com

// Wichtig · Fallstricke

Binäre Daten: Für Attribute mit binären Inhalten (z. B. jpegPhoto, userCertificate) muss ldap_get_values_len() verwendet werden. ldap_get_values() kann bei binären Daten zu Datenverlust oder fehlerhafter Ausgabe führen, da die Werte als Zeichenkette behandelt werden.

Groß-/Kleinschreibung: LDAP-Attributnamen sind laut Standard case-insensitive; dennoch empfiehlt sich eine einheitliche Schreibweise zur besseren Lesbarkeit.

PHP 8.1: Ab PHP 8.1 werden LDAP-Ressourcen durch dedizierte Klassen (LDAP\Connection, LDAP\Result, LDAP\ResultEntry) ersetzt. Älterer Code mit dem Typ resource funktioniert weiterhin, sollte aber migriert werden.