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