PHP ldap_search抑制达到警告限制

时间:2016-04-22 15:49:54

标签: php ldap

我正在查询一个相当大的ldap用户数据集。我真的没办法解决它。我已经构建了其他较小的查询,可以按组,管理员和其他关键信息过滤,但现在这一个查询要求我查看公司中的所有用户(+100,000个用户)。返回的结果集进入jquery自动完成框。所以这个列表并没有完全疯狂我正在使用第六个ldap_search参数,它允许你限制返回结果的数量。基本上,如果用户还没有看到他们需要的用户,那么他们应该提供更多的字符。

$sr=ldap_search($ds, $dn, $search, $filter,0,15);

问题是,如果在ldap_search上达到限制,那么它会返回一条带有数据集的警告消息,告诉您这不是返回的所有结果。这会打破自动填充框的填充。我希望能够在结果多于配置限制时忽略警告。

**问题是我不想消除ldap_search函数返回的所有错误消息。所以使用php'@'抑制方法是不可能的。

有没有人知道另一种处理方法?

2 个答案:

答案 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()调用。