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