Signatur
Beschreibung
ldap_first_attribute() liest den Namen des ersten Attributs aus einem LDAP-Eintrags-Objekt (einem einzelnen Datensatz aus einem LDAP-Suchergebnis). Die Funktion setzt dabei den internen Zeiger auf den Anfang der Attributliste und bereitet so den Einstieg für eine Iteration über alle Attribute eines Eintrags mit ldap_next_attribute() vor.
Typischerweise wird diese Funktion in Kombination mit ldap_next_attribute() verwendet, um alle vorhandenen Attribute eines LDAP-Eintrags der Reihe nach zu durchlaufen, ohne die vollständige Attributliste vorab zu kennen. Der zurückgegebene String enthält nur den Namen des Attributs (z. B. cn, mail). Um den tatsächlichen Wert des Attributs abzurufen, muss anschließend ldap_get_values() aufgerufen werden.
Das Eintrags-Objekt wird üblicherweise durch ldap_first_entry() oder ldap_next_entry() aus einem Suchergebnis gewonnen. Soll die gesamte Attributliste auf einmal abgerufen werden, bietet sich alternativ ldap_get_attributes() an, das ein vollständiges assoziatives Array zurückgibt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $entry Pflicht | LDAP\Result\Entry | Ein LDAP-Eintrags-Objekt, das durch ldap_first_entry() oder ldap_next_entry() aus einem Suchergebnis gewonnen wurde. |
Rückgabewert
false wenn der Eintrag keine Attribute enthält oder ein Fehler aufgetreten ist.Beispiele
Alle Attributnamen eines LDAP-Eintrags iterieren
<?php
$ds = ldap_connect('ldap://ldap.example.com');
ldap_bind($ds, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$sr = ldap_search($ds, 'dc=example,dc=com', '(uid=mustermann)');
$entry = ldap_first_entry($ds, $sr);
if ($entry !== false) {
$attribut = ldap_first_attribute($entry);
while ($attribut !== false) {
echo 'Attributname: ' . $attribut . PHP_EOL;
$attribut = ldap_next_attribute($entry);
}
}
ldap_close($ds);
?>
Attributnamen mit zugehörigen Werten ausgeben
<?php
$ds = ldap_connect('ldap://ldap.example.com');
ldap_bind($ds, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$sr = ldap_search($ds, 'dc=example,dc=com', '(uid=mustermann)');
$entry = ldap_first_entry($ds, $sr);
if ($entry !== false) {
$dn = ldap_get_dn($ds, $entry);
echo 'DN: ' . $dn . PHP_EOL;
$attribut = ldap_first_attribute($entry);
while ($attribut !== false) {
$werte = ldap_get_values($ds, $entry, $attribut);
unset($werte['count']);
echo $attribut . ': ' . implode(', ', $werte) . PHP_EOL;
$attribut = ldap_next_attribute($entry);
}
}
ldap_close($ds);
?>
// Wichtig · Fallstricke
PHP 8.1: Der Parameter $entry erwartet seit PHP 8.1 ein LDAP\Result\Entry-Objekt. In früheren PHP-Versionen wurde eine Ressource (resource) übergeben. Alter Code, der eine Ressource übergibt, erzeugt in PHP 8.1+ einen TypeError.
Interner Zeiger: Der interne Attribut-Zeiger ist an das Eintrags-Objekt gebunden. Ein erneuter Aufruf von ldap_first_attribute() setzt diesen Zeiger zurück auf den Anfang. Bei verschachtelten Schleifen über mehrere Einträge ist daher sicherzustellen, dass der richtige Eintrags-Kontext verwendet wird.
Alternative: Für einfachere Fälle ist ldap_get_attributes() komfortabler, da es alle Attribute und deren Werte auf einmal als Array zurückgibt. Die Kombination aus ldap_first_attribute() und ldap_next_attribute() ist vor allem dann nützlich, wenn große Ergebnismengen speichereffizient verarbeitet werden sollen.