[#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@horde.org
Created 2007-04-16 (4623 days ago)
Due
Updated 2007-04-16 (4623 days ago)
Assigned
Resolved
Milestone
Patch No

Comments
Chuck Hagenbuch <chuck@horde.org> 2007-04-16 04:54:15
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;

     }

}