PHP ldap_search/list在通过未索引的参数进行搜索并且条目超过服务器限制时返回null


php ldap_search/list returns null when searching by an unindexed parameter and the entry exceeds the server limit

我正在通过未索引的键(如email)进行ldap搜索,如下所示:

$dn = 'ou=users,ou=y,o=x';
$filters = '(email=example@so.com)';
$just = array ('id');
$sr = ldap_list ($ds_id, $dn, $filters, $just);

,如果条目在<SERVER_RETURN_LIMIT(在我的例子中>

我想知道的是,无论我有多少条目,无论我想检索的条目位于哪个位置,当我通过未索引的键进行搜索时,是否有任何方法可以获得预期的结果。

无论键的类型是什么,每次搜索时都会得到这个警告:

Warning: ldap_list() [function.ldap-list]: Partial search results returned: Adminlimit exceeded in...

如果搜索也成功,并且结果总是1项,则显示警告。我不希望返回多于1个条目/搜索。

希望你们能给我一些启示。助教!

'administrative limit exceeded'表示LDAP客户端超过了服务器管理员设置的某些限制-在许多LDAP服务器中,此限制称为查找限制。大小限制超出意味着搜索参数匹配1)大于客户端请求的大小限制的条目数量或2)大于服务器施加的大小限制的条目数量。管理限制和大小限制是完全不同的概念。

LDAP客户端永远不应该将大小限制设置为零—这有效地告诉服务器将匹配搜索参数的所有条目返回给客户端。这不仅会使服务器不堪重负并对其他客户端产生不利影响,而且客户端可能无法处理返回的条目数量。客户端应该始终为搜索提供非零(正)的大小限制和时间限制。有关更多信息,请参见"LDAP:编程实践"。正确配置的服务器无论如何都会限制返回给客户机的条目数量,并且客户机请求的大小限制(和时间限制)不能覆盖服务器强加的限制,因此将大小限制(或时间限制)设置为零可能不会得到您想要的结果。现代的、专业质量的目录服务器甚至可以限制根DN在搜索时间上返回的条目数量。

LDAP客户端在没有与服务器管理员进行安排的情况下绝不能执行未索引的搜索,因为未索引的搜索可能会对服务器性能产生不利影响,并导致不知情的LDAP客户端性能下降。正确配置的服务器将禁止对部分或所有客户端进行无索引搜索,尽管管理员可能会在可以提供合理业务理由的特殊情况下批准无索引搜索。

一些建议:

  • 添加一个参数(sizelimit)告诉LDAP不要限制输出的数量。

    $ sr = ldap_list (ds_id美元,美元的dn,过滤器,美元,0),

  • 使用包含dc字段的搜索条件。我的意思是:

    $ dn = ' ou =用户,ou = y, o = x, dc =公司,dc = es的;