[#5258] Make use of LDAP pagination if available
Summary Make use of LDAP pagination if available
Queue Turba
Queue Version HEAD
Type Enhancement
State Accepted
Priority 2. Medium
Owners
Requester Chuck Hagenbuch <chuck (at) horde (dot) org>
Created 04/16/2007 (391 days ago)
Due
Updated 04/16/2007 (391 days ago)
Assigned
Resolved
Attachments
Milestone
Patch

History
04/16/2007 Chuck Hagenbuch Comment #1
Type ⇒ Enhancement
Summary ⇒ Make use of LDAP pagination if available
Priority ⇒ 2. Medium
State ⇒ Accepted
Queue ⇒ Turba
Reply to this comment
From the nyphp-talk list:

The below code demonstrates how to use the pagedResultsControl. The PHP
LDAP API is somewhat course but it should work.

Mike

$continue = true;
while ($continue) {
    $paged_control = array(
                        array(
                            'oid' => PAGED_CONTROL_OID,
                            'iscritical' => true,
                            'value' => ldap_ber_printf ('{iO}',
                                                        PAGE_SIZE, $cookie)
                        )
                     );
    if (!ldap_set_option($l, LDAP_OPT_SERVER_CONTROLS, $paged_control)) {
        echo "Not OK: ldap_set_option (controls)\n";
        exit;
    }   

    $sr = ldap_search($l, $query, $query_filter, $query_attribs, 0, 0, 0,
                      LDAP_DEREF_NEVER);

    if ($sr === FALSE) {
        echo "Not OK: ldap_search\n";
        exit;
    }

    if (!ldap_parse_result ($l, $sr, &$errcode, &$matcheddn, &$errmsg,
                            &$referrals, &$serverctrls)) {
        echo "Not OK: ldap_parse_result\n";
        exit;
    }

    $paged_control_found = FALSE;
    if (isset($serverctrls)) {
        foreach ($serverctrls as $i) {
            if ($i['oid'] == PAGED_CONTROL_OID) {
                ldap_ber_scanf($i['value'], '{iO}', &$pagesize, &$cookie);
                $paged_control_found = TRUE;
                break;
            }
        }
    }
    if (!$paged_control_found) {
        echo "Not OK: paged control not found in response \n";
        exit;
    }

    // process entries as usual here ...

    if ($cookie == '') {
        $continue = false;
    }
}