使用PHP通过分页搜索LDAP库
我需要遍历LDAP基础上的所有条目。实际上,LDAP服务器的每次搜索限制为500个条目。我正在使用PHP5.6 我使用和找到了可能的解决方案,并实现了一个简单的测试脚本:使用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_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简单得多。最后,通过扩展服务器限制,问题得到了解决。这不是最好的解决方案,但它正在发挥作用(目前)。