【发布时间】:2016-04-13 20:44:14
【问题描述】:
我需要遍历 LDAP 基础上的所有条目。实际上,LDAP 服务器每次搜索限制为 500 个条目。我正在使用 PHP 5.6。
我使用ldap_control_paged_result 和ldap_control_paged_result_response 找到了可能的解决方案,并且只实现了一个简单的测试脚本:
(...)
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)
(...)
我错过了什么吗?
【问题讨论】:
-
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);电话真的发生在搜索之前吗?如果是这样,则需要在ldap_connect()之后、ldap_bind()之前调用。这可以解释它,因为分页是 LDAP v3 功能,如果它没有在正确的位置设置协议版本,它可能不会生效。 -
@rkosegi 对于 IMO 可能更简单的问题,这是一个非常完整且复杂的解决方案。最后,问题得到解决,扩大了服务器限制。不是最好的解决方案,但它正在工作(目前)。
标签: php pagination ldap