Signatur
Beschreibung
Diese Funktion wird in Verbindung mit ldap_control_paged_result() eingesetzt, um seitenweise LDAP-Suchergebnisse abzurufen. Nachdem eine LDAP-Suche mit aktiviertem Paginierungs-Control durchgeführt wurde, liest ldap_control_paged_result_response() das vom Server zurückgegebene Cookie aus, das für die nächste Seitenanforderung benötigt wird.
Solange das zurückgegebene $cookie nicht leer ist, gibt es weitere Ergebnisseiten. Das Cookie muss in der nächsten Iteration via ldap_control_paged_result() übergeben werden, damit der Server die Paginierung fortsetzt. Ist das Cookie ein leerer String, wurde die letzte Seite erreicht.
Der optionale Parameter $estimated gibt die vom LDAP-Server geschätzte Gesamtanzahl der Einträge zurück – dieser Wert ist jedoch nicht zuverlässig und sollte nur als Richtwert behandelt werden.
Wichtig: Diese Funktion ist seit PHP 7.4 als veraltet markiert und wurde in PHP 8.0 entfernt. Für PHP 8.x ist stattdessen ldap_search() mit dem controls-Parameter und LDAP_CONTROL_PAGEDRESULTS zu verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die durch ldap_connect() erzeugt wurde. |
|
| $result Pflicht | LDAP\Result | Das LDAP-Ergebnisobjekt, das von ldap_search(), ldap_list() oder ldap_read() zurückgegeben wurde. |
|
| $cookie | string | Wird als Referenz übergeben und enthält nach dem Aufruf das Paginierungs-Cookie des Servers. Ein leerer String bedeutet, dass keine weiteren Seiten vorhanden sind. | |
| $estimated | int | Wird als Referenz übergeben und enthält nach dem Aufruf die vom Server geschätzte Gesamtanzahl der Einträge. Dieser Wert ist nicht garantiert korrekt. |
Rückgabewert
true zurück, wenn die Paginierungs-Antwort erfolgreich aus dem Ergebnis gelesen werden konnte, andernfalls false.Beispiele
Alle LDAP-Einträge seitenweise abrufen (PHP 7.x)
<?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');
$pageSize = 100;
$cookie = '';
$allEntries = [];
do {
// Paginierungs-Control für diese Seite setzen
ldap_control_paged_result($ldap, $pageSize, true, $cookie);
$result = ldap_search(
$ldap,
'dc=example,dc=com',
'(objectClass=inetOrgPerson)',
['cn', 'mail']
);
if (!$result) {
break;
}
$entries = ldap_get_entries($ldap, $result);
for ($i = 0; $i < $entries['count']; $i++) {
$allEntries[] = $entries[$i]['cn'][0] ?? '';
}
// Cookie und geschätzte Gesamtanzahl auslesen
ldap_control_paged_result_response($ldap, $result, $cookie, $estimated);
echo "Seite abgerufen. Geschätzte Gesamtanzahl: {$estimated}\n";
} while (!empty($cookie)); // Solange Cookie vorhanden, weitere Seiten abrufen
echo 'Gesamt abgerufene Einträge: ' . count($allEntries) . PHP_EOL;
ldap_unbind($ldap);
Moderner Ersatz in PHP 8.x mit ldap_search und Controls
<?php
// PHP 8.0+ Ersatz für ldap_control_paged_result / ldap_control_paged_result_response
$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');
$pageSize = 100;
$cookie = '';
$allEntries = [];
do {
$controls = [
[
'oid' => LDAP_CONTROL_PAGEDRESULTS,
'iscritical' => true,
'value' => [
'size' => $pageSize,
'cookie' => $cookie,
],
],
];
$result = ldap_search(
$ldap,
'dc=example,dc=com',
'(objectClass=inetOrgPerson)',
['cn', 'mail'],
0, 0, -1, LDAP_DEREF_NEVER,
$controls
);
ldap_parse_result($ldap, $result, $errcode, $matcheddn, $errmsg, $referrals, $responseControls);
$entries = ldap_get_entries($ldap, $result);
for ($i = 0; $i < $entries['count']; $i++) {
$allEntries[] = $entries[$i]['cn'][0] ?? '';
}
$cookie = $responseControls[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'] ?? '';
} while (!empty($cookie));
echo 'Gesamt: ' . count($allEntries) . PHP_EOL;
ldap_unbind($ldap);
// Wichtig · Fallstricke
Deprecation: ldap_control_paged_result_response() wurde in PHP 7.4 als veraltet markiert (deprecated) und in PHP 8.0 vollständig entfernt. Für neue Projekte und bei der Migration auf PHP 8 sollte statt dessen ldap_search() mit dem $controls-Parameter und ldap_parse_result() zur Auswertung verwendet werden.
Das Cookie enthält serverseitig sensible Sitzungsdaten und sollte niemals direkt an Endbenutzer weitergegeben oder in unsicheren Speichern abgelegt werden.
Nicht alle LDAP-Server unterstützen das Paginierungs-Control (RFC 2696). Wenn der Server das Control als kritisch ablehnt, schlägt die Suche fehl. In diesem Fall sollte LDAP_OPT_SERVER_CONTROLS entsprechend geprüft werden.