我正在查询一个相当大的ldap用户数据集。我真的没办法解决它。我已经构建了其他较小的查询,可以按组,管理员和其他关键信息过滤,但现在这一个查询要求我查看公司中的所有用户(+100,000个用户)。返回的结果集进入jquery自动完成框。所以这个列表并没有完全疯狂我正在使用第六个ldap_search参数,它允许你限制返回结果的数量。基本上,如果用户还没有看到他们需要的用户,那么他们应该提供更多的字符。
$sr=ldap_search($ds, $dn, $search, $filter,0,15);
问题是,如果在ldap_search上达到限制,那么它会返回一条带有数据集的警告消息,告诉您这不是返回的所有结果。这会打破自动填充框的填充。我希望能够在结果多于配置限制时忽略警告。
**问题是我不想消除ldap_search函数返回的所有错误消息。所以使用php'@'抑制方法是不可能的。
有没有人知道另一种处理方法?
答案 0 :(得分:1)
根据您正在与之通信的LDAP服务器,它可能支持分页搜索结果和/或虚拟列表视图(VLV)控件。这两者都可用于通过大型搜索结果集进行分页。你可以在这里看到一些讨论(尽管这些例子是用Java编写的): LDAP: How to return more than 1000 results (java)
似乎支持PHP中的分页结果控件,请参阅: http://php.net/manual/it/function.ldap-control-paged-result.php
我希望这会有所帮助。
答案 1 :(得分:1)
根据我发表的评论,您可以使用@
取消,但请检查$sr
是否为false,然后使用ldap_error()
进行检查:
$sr = @ldap_search($ds, $dn, $search, $filter, 0, 15);
if (!$sr) {
$error = ldap_error($ds);
$code = ldap_errno($ds);
echo "($code) $error";
} else {
// do something with the results...
}
通过这种方式,您可以抑制LDAP功能中的错误,但如果需要,仍然可以显示/记录错误消息/代码。
另一种方法是使用分页:
// Force LDAP to return sets of 15 results at a time
ldap_control_paged_result($ds, 15);
$sr = ldap_search($ds, $dn, $search, $filter, 0);
$entries = ldap_get_entries($ds, $sr);
// Reset the page control so you don't interfere with other searches
ldap_control_paged_result($ds, 0);
上述内容还假设您使用的是LDAP v3,并且已经在ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
之后的代码中的某处进行了所需的ldap_connect()
调用。