Start · Sprachen · PHP · Referenz · ldap_parse_result

ldap_parse_result

Funktion

Extrahiert detaillierte Statusinformationen (Fehlercode, Fehlermeldung, Referrals usw.) aus einem LDAP-Ergebnis-Objekt.

seit PHP 4.0.5 Kategorie: misc

Signatur

ldap_parse_result(LDAP\Connection $ldap, LDAP\Result $result, int &$error_code, string &$matched_dn = null, string &$error_message = null, array &$referrals = null, array &$controls = null): bool

Beschreibung

ldap_parse_result() liest die im LDAP-Ergebnis enthaltenen Metadaten aus und schreibt sie in die übergebenen Referenz-Variablen. Dies ist besonders nützlich, wenn man nach einer LDAP-Operation (z. B. ldap_search(), ldap_add() oder ldap_mod_replace()) genauere Informationen über den Erfolg oder Misserfolg der Operation benötigt, als ldap_errno() allein liefern kann.

Der Parameter $error_code wird mit dem numerischen LDAP-Fehlercode befüllt (0 = Erfolg). Über ldap_err2str() lässt sich der Code in einen lesbaren Text umwandeln. $error_message enthält eine optionale, vom Server gelieferte Fehlerbeschreibung, $matched_dn gibt den Distinguished Name (DN) zurück, den der Server bei einem teilweisen Treffer zurückmeldet, und $referrals enthält eine Liste von Referral-URLs, falls der Server auf andere LDAP-Server weiterverweist.

Ab PHP 7.3 kann zusätzlich der Parameter $controls übergeben werden, um LDAP-Server-Kontrollen (Response Controls) aus dem Ergebnis zu lesen — etwa bei paginierten Suchanfragen über das LDAP_CONTROL_PAGEDRESULTS-Control.

Die Funktion wird typischerweise nach Operationen eingesetzt, die ein LDAP\Result-Objekt liefern, um serverseitige Diagnoseinformationen zu extrahieren, die über den einfachen Rückgabewert true/false hinausgehen.

Parameter

Name Typ Default Beschreibung
$ldap Pflicht LDAP\Connection Eine gültige LDAP-Verbindungsressource, die von ldap_connect() zurückgegeben wurde.
$result Pflicht LDAP\Result Ein LDAP-Ergebnis-Objekt, das von Funktionen wie ldap_search(), ldap_list() oder ldap_read() stammt.
$error_code Pflicht int Wird per Referenz übergeben und nach dem Aufruf mit dem numerischen LDAP-Ergebniscode befüllt. Der Wert 0 bedeutet Erfolg (LDAP_SUCCESS).
$matched_dn string null Optionale Referenz-Variable, die mit dem vom Server zurückgemeldeten teilweise übereinstimmenden DN befüllt wird, falls ein solcher existiert.
$error_message string null Optionale Referenz-Variable, die mit einer serverseitigen Fehlerbeschreibung als Zeichenkette befüllt wird.
$referrals array null Optionale Referenz-Variable, die mit einem Array von Referral-URLs befüllt wird, auf die der Server verweist.
$controls array null Optionale Referenz-Variable (ab PHP 7.3), die mit einem Array der vom Server zurückgegebenen LDAP-Controls befüllt wird. Wird z. B. für paginierte Ergebnisse (LDAP_CONTROL_PAGEDRESULTS) benötigt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn das übergebene Ergebnis-Objekt ungültig ist).

Beispiele

Fehlercode und Fehlermeldung nach einer LDAP-Suche auslesen

<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheim');

$result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=inetOrgPerson)');

$errorCode    = 0;
$matchedDn    = '';
$errorMessage = '';
$referrals    = [];

if (ldap_parse_result($ldap, $result, $errorCode, $matchedDn, $errorMessage, $referrals)) {
    if ($errorCode === LDAP_SUCCESS) {
        echo 'Suche erfolgreich.' . PHP_EOL;
    } else {
        echo 'LDAP-Fehler ' . $errorCode . ': ' . ldap_err2str($errorCode) . PHP_EOL;
        echo 'Serverseitige Meldung: ' . $errorMessage . PHP_EOL;
    }
} else {
    echo 'ldap_parse_result() ist fehlgeschlagen.' . PHP_EOL;
}

ldap_unbind($ldap);
Suche erfolgreich.

Paginierte LDAP-Suche mit Response-Controls auslesen

<?php
$ldap = ldap_connect('ldap://localhost');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheim');

$cookie   = '';
$pageSize = 100;

do {
    // Seitenweise Suche mit dem PagedResults-Control
    $controls = [
        [
            'oid'        => LDAP_CONTROL_PAGEDRESULTS,
            'iscritical' => false,
            'value'      => ['size' => $pageSize, 'cookie' => $cookie],
        ],
    ];

    $result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=*)', [], 0, 0, 0, LDAP_DEREF_NEVER, $controls);

    $entries = ldap_get_entries($ldap, $result);
    echo 'Einträge auf dieser Seite: ' . $entries['count'] . PHP_EOL;

    $responseControls = [];
    ldap_parse_result($ldap, $result, $errorCode, $matchedDn, $errorMessage, $referrals, $responseControls);

    // Cookie für die nächste Seite auslesen
    $cookie = $responseControls[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'] ?? '';

} while (!empty($cookie));

echo 'Alle Seiten verarbeitet.' . PHP_EOL;
ldap_unbind($ldap);
Einträge auf dieser Seite: 100 Einträge auf dieser Seite: 42 Alle Seiten verarbeitet.

// Wichtig · Fallstricke

Versionshinweis: Bis PHP 8.0 wurden LDAP-Verbindungen und -Ergebnisse als Ressourcen (resource) übergeben. Ab PHP 8.1 sind es Objekte der Klassen LDAP\Connection und LDAP\Result.

Der Parameter $controls steht erst ab PHP 7.3 zur Verfügung. Bei älteren PHP-Versionen muss auf diesen Parameter verzichtet werden.

Nicht alle LDAP-Server befüllen $matched_dn, $error_message oder $referrals — diese können leer sein, auch wenn kein Fehler vorliegt. Prüfe stets den $error_code als primäre Fehlerquelle.