Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP通过分页搜索LDAP库_Php_Pagination_Ldap - Fatal编程技术网

使用PHP通过分页搜索LDAP库

使用PHP通过分页搜索LDAP库,php,pagination,ldap,Php,Pagination,Ldap,我需要遍历LDAP基础上的所有条目。实际上,LDAP服务器的每次搜索限制为500个条目。我正在使用PHP5.6 我使用和找到了可能的解决方案,并实现了一个简单的测试脚本: (...) ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3); $pageSize = 100; $cookie = ''; $count = 0; do { ldap_control_paged_result($conn, $pageSize,

我需要遍历LDAP基础上的所有条目。实际上,LDAP服务器的每次搜索限制为500个条目。我正在使用PHP5.6

我使用和找到了可能的解决方案,并实现了一个简单的测试脚本:

 (...)
 ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);

 $pageSize = 100;
 $cookie = '';
 $count = 0;
 do {
     ldap_control_paged_result($conn, $pageSize, true, $cookie);

     $result  = ldap_search($conn, 'ou=people,dc=ufsf,dc=br', 'uid=*', ['uid', 'name']);
     $entries = ldap_get_entries($conn, $result);

     foreach ($entries as $entry) {
        $count++;
        echo $count . ' - ' . $entry['name'][0] . PHP_EOL;
     }

     ldap_control_paged_result_response($conn, $result, $cookie);

 } while($cookie !== null && $cookie != '');
但我仍然无法检索超过500个条目,这是输出:

(...)
498  -  NAME SUPRESSED
499  -  NAME SUPRESSED
500  -  NAME SUPRESSED
WARNING: ldap_control_paged_result_response(): Result is: Size limit exceeded (4)
WARNING: ldap_control_paged_result_response(): Result is: Size limit exceeded (4)
WARNING: ldap_control_paged_result_response(): Result is: Size limit exceeded (4)   
(...)

我遗漏了什么吗?

在这里,您应该可以找到如何检索500多个条目的答案:
. 例如,对于分页,您可以使用。

这不适用于OPs问题。问题是LDAP服务器大小结果限制。我也有同样的问题,这个答案对我有帮助。当然,对您来说,最好的答案是:为LDAP服务器设置高于500的限制。这就是为什么你在没有任何相关反馈的情况下投了反对票。顺便说一句,这不是正确的方法,因为一段时间后你会再次遇到同样的问题。如果可以的话,我会再次投反对票。设置服务器大小限制不是一个解决方案(也不是您的答案)。您需要使用正确的API来检索分页结果。我做过几次。只需使用符合RFC2696的API即可。您正在引用关于将结果合并到一个数组中的答案。可能重复的是
ldap\u set\u选项($conn,ldap\u OPT\u PROTOCOL\u VERSION,3)呼叫是否在搜索前直接发生?如果是这样,则需要在
ldap\u connect()
之后调用,但在
ldap\u bind()之前调用。这也许可以解释这一点,因为分页是LDAP v3的一项功能,如果它没有将协议版本设置在正确的位置,它可能不会生效。@rkosegi这是一个非常完整且复杂的解决方案,可以让IMO简单得多。最后,通过扩展服务器限制,问题得到了解决。这不是最好的解决方案,但它正在发挥作用(目前)。