Signatur
Beschreibung
ldap_next_attribute() wird verwendet, um durch die Liste der Attribute eines LDAP-Ergebniseintrags zu iterieren. Nachdem ldap_first_attribute() das erste Attribut zurückgegeben hat, liefert ldap_next_attribute() bei jedem weiteren Aufruf das nächste Attribut, bis alle Attribute durchlaufen wurden und false zurückgegeben wird.
Die Funktion benötigt neben der LDAP-Verbindung und dem Ergebniseintrag auch den internen BER-Zeiger ($ber_identifier), der von ldap_first_attribute() gesetzt und bei jedem Aufruf von ldap_next_attribute() automatisch weitergeführt wird. Ab PHP 8.0 ist dieser Parameter optional und wird intern verwaltet.
Typischerweise wird das Muster ldap_first_attribute() / ldap_next_attribute() in einer for- oder while-Schleife verwendet, um alle Attribute eines LDAP-Eintrags dynamisch auszulesen, wenn deren Namen nicht im Voraus bekannt sind. In vielen modernen Anwendungsfällen kann stattdessen auch ldap_get_attributes() verwendet werden, das alle Attribute auf einmal als Array zurückgibt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die zuvor mit ldap_connect() erzeugt wurde. |
|
| $entry Pflicht | LDAP\ResultEntry | Ein LDAP-Ergebniseintrag, der durch ldap_first_entry() oder ldap_next_entry() ermittelt wurde. |
|
| $ber_identifier | array | Der interne BER-Zeiger, der die aktuelle Position beim Iterieren über die Attribute speichert. Wird von ldap_first_attribute() initialisiert und von ldap_next_attribute() automatisch weitergesetzt. Ab PHP 8.0 wird dieser Parameter nicht mehr verwendet und sollte weggelassen werden. |
Rückgabewert
false zurückgegeben.Beispiele
Alle Attribute eines LDAP-Eintrags iterieren
<?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=jdoe)');
$entry = ldap_first_entry($ldap, $result);
if ($entry !== false) {
// Erstes Attribut holen
$attribute = ldap_first_attribute($ldap, $entry);
while ($attribute !== false) {
$values = ldap_get_values($ldap, $entry, $attribute);
echo $attribute . ': ' . implode(', ', array_slice($values, 0, $values['count'])) . PHP_EOL;
// Nächstes Attribut holen
$attribute = ldap_next_attribute($ldap, $entry);
}
}
ldap_unbind($ldap);
Vergleich mit ldap_get_attributes (kompaktere Alternative)
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap);
$result = ldap_search($ldap, 'dc=example,dc=com', '(uid=jdoe)');
$entry = ldap_first_entry($ldap, $result);
if ($entry !== false) {
// Alle Attribute auf einmal als Array laden
$attributes = ldap_get_attributes($ldap, $entry);
for ($i = 0; $i < $attributes['count']; $i++) {
$attrName = $attributes[$i];
echo $attrName . PHP_EOL;
}
}
ldap_unbind($ldap);
// Wichtig · Fallstricke
Hinweis zur PHP-Version: Ab PHP 8.0.0 erwartet die Funktion Objekte vom Typ LDAP\Connection und LDAP\ResultEntry anstelle der früheren Ressourcen-Typen. Der Parameter $ber_identifier wurde ebenfalls als veraltet markiert und in PHP 8.0 entfernt.
Alternative: Wenn alle Attribute eines Eintrags auf einmal benötigt werden, ist ldap_get_attributes() die einfachere und bevorzugte Methode, da sie alle Daten als strukturiertes Array zurückgibt, ohne manuell iterieren zu müssen.
Fehlerbehandlung: Achte darauf, Rückgabewerte zu prüfen. Falls der übergebene Eintrag ungültig ist oder keine Attribute enthält, gibt die Funktion sofort false zurück.