Start · Sprachen · PHP · Referenz · ldap_get_values_len

ldap_get_values_len

Funktion

Gibt alle binären Werte eines bestimmten Attributs eines LDAP-Ergebniseintrags zurück, inklusive Binärdaten (z. B. Fotos, Zertifikate).

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_get_values_len(LDAP\Connection $ldap, LDAP\ResultEntry $entry, string $attribute): array|false

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

Typ
array|false
Beschreibung
Gibt bei Erfolg ein Array zurück, das die Werte des angegebenen Attributs enthält. Der Schlüssel 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);
E-Mail-Adressen (1): jdoe@example.com Zertifikat-Länge: 1234 Bytes

// 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.