Signatur
Beschreibung
ldap_get_values_len() liest alle Werte eines angegebenen Attributs aus einem LDAP-Ergebniseintrag aus und gibt sie als Array zurück. Im Gegensatz zu ldap_get_values() ist diese Funktion binärsicher und eignet sich daher für Attribute, die Binärdaten enthalten können – wie jpegPhoto, userCertificate oder userPassword.
Das zurückgegebene Array enthält als numerische Einträge die einzelnen Attributwerte sowie einen Schlüssel count, der die Anzahl der Werte angibt. Da LDAP-Attribute mehrwertig sein können (z. B. mehrere E-Mail-Adressen oder Zertifikate), kann das Array mehr als einen Eintrag enthalten.
Diese Funktion sollte immer dann bevorzugt werden, wenn nicht sicher ist, ob ein Attribut ausschließlich Textdaten enthält. Für reine Textattribute wie cn oder mail kann stattdessen ldap_get_values() verwendet werden – letztere ist jedoch nicht für Binärdaten geeignet.
Typischerweise wird die Funktion in Kombination mit ldap_first_entry()/ldap_next_entry() sowie ldap_first_attribute()/ldap_next_attribute() eingesetzt, um alle Attribute und deren Werte eines LDAP-Suchergebnisses zu durchlaufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die mit ldap_connect() erstellt und mit ldap_bind() authentifiziert wurde. |
|
| $entry Pflicht | LDAP\ResultEntry | Ein einzelner LDAP-Ergebniseintrag, wie er z. B. von ldap_first_entry() oder ldap_next_entry() zurückgegeben wird. |
|
| $attribute Pflicht | string | Der Name des Attributs, dessen Werte abgerufen werden sollen, z. B. 'jpegPhoto', 'userCertificate' oder 'mail'. |
Rückgabewert
count gibt die Anzahl der Werte an; numerische Indizes (beginnend bei 0) enthalten die eigentlichen Werte als Strings (ggf. mit Binärinhalt). Bei einem Fehler wird false zurückgegeben.Beispiele
jpegPhoto eines LDAP-Benutzers abrufen und als Bild 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=jdoe)', ['jpegPhoto']);
$entry = ldap_first_entry($ldap, $result);
if ($entry !== false) {
$photos = ldap_get_values_len($ldap, $entry, 'jpegPhoto');
if ($photos !== false && $photos['count'] > 0) {
// Bild als HTTP-Response ausgeben
header('Content-Type: image/jpeg');
echo $photos[0];
} else {
echo 'Kein Foto gefunden.';
}
}
ldap_unbind($ldap);
Alle Werte eines Attributs auflisten (auch Binärdaten sicher ermitteln)
<?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)', ['mail', 'userCertificate']);
$entry = ldap_first_entry($ldap, $result);
if ($entry !== false) {
// E-Mail-Adressen (Text)
$mails = ldap_get_values_len($ldap, $entry, 'mail');
if ($mails !== false) {
echo "E-Mail-Adressen ({$mails['count']}):\n";
for ($i = 0; $i < $mails['count']; $i++) {
echo ' ' . $mails[$i] . "\n";
}
}
// Zertifikat (Binärdaten)
$certs = ldap_get_values_len($ldap, $entry, 'userCertificate');
if ($certs !== false && $certs['count'] > 0) {
echo "Zertifikat-Länge: " . strlen($certs[0]) . " Bytes\n";
}
}
ldap_unbind($ldap);
// Wichtig · Fallstricke
Binärsicherheit: Verwende diese Funktion anstelle von ldap_get_values(), wenn du nicht ausschließen kannst, dass ein Attribut Binärdaten enthält. ldap_get_values() kann Binärdaten abschneiden oder korrumpieren, da es auf null-terminierten Strings basiert.
PHP 8.1+: Ab PHP 8.1.0 wurden die LDAP-Ressourcen durch dedizierte Klassen (LDAP\Connection, LDAP\Result, LDAP\ResultEntry) ersetzt. Älterer Code, der resource-Typen verwendet, funktioniert weiterhin, erzeugt aber Deprecation-Warnungen in zukünftigen Versionen.
Groß-/Kleinschreibung: Der Attributname im Parameter attribute ist in der Regel nicht case-sensitiv, jedoch sollte aus Konsistenzgründen die in der LDAP-Schema-Definition verwendete Schreibweise bevorzugt werden.