PHP< 5.4 LDAP 1000行限制

时间:2017-01-03 10:24:49

标签: php ldap limit

我明白了:

Warning: ldap_search(): Partial search results returned: Sizelimit exceeded

尝试在ldap_search条记录上使用>1000

找到>5.4的解决方案,但仍无法找到< 5.4 PHP版本。

P.S。无法更新服务器版本。还尝试设置限制:

ldap_set_option($ldap_connect, LDAP_OPT_SIZELIMIT, 100);

但它会带来同样的警告。

2 个答案:

答案 0 :(得分:2)

PHP的解决方案< 5.4是(测试蚂蚁工作):

$alph = array('a', 'b', 'c', 'd', 'e',
        'f', 'g', 'h', 'i', 'j', 'k',
        'l', 'm', 'n', 'o', 'p', 'r', 's',
        't', 'u', 'y', 'v', 'w', 'z');

    foreach ($alph as $letter){

    $sr = ldap_search($ldap, $dn, '(&(telephoneNumber=*)(sAMAccountName=' . $letter . '*))', array('cn','telephoneNumber','sAMAccountName'), null, 0, 0);

    $users = ldap_get_entries($ldap, $sr);
       foreach ($users as $user) {
        echo $user['sAMAccountName']['0']."<br/>";
        }
     }

您还可以添加数字过滤器,例如telephoneNumber,取决于你有多少记录。如果你有更多的记录,你可以尝试使用更多的循环过滤第一和第二个字母,如sAMAccountName=' .$letter.$letter2.'*

答案 1 :(得分:1)

你似乎运气不好!

您可以将客户端的sizelimit更改为您喜欢的任何值,但不能设置服务器的sizelimit。这只适用于LDAP服务器的管理员,他们通常有充分的理由限制返回的结果集。服务器端限制通常是1000个条目。通过设置ldap_set_option($ldap_connect, LDAP_OPT_SIZELIMIT, 100);,您可以将该限制减少到返回的100个条目,但不能将其扩展到服务器限制之外。

获得“更多”结果的唯一方法是使用paged results。这意味着您多次查询LDAP-Server,每次获得最大结果集,但每次从您尚未收到的第一个条目开始。在PHP代码中,您可以聚合结果,最终有超过1000个条目。

但这只能从PHP 5.4开始提供。所以看起来你运气不好。

在我看来,有三种解决方案:

  1. 修补LDAP扩展并对其进行编译,以便您的PHP版本可以使用分页结果,
  2. 更新为supported PHP-Version
  3. 说服您的LDAP-Admin引发服务器端sizelimit。
  4. 由于3通常很难,1需要很多时间,所以我强烈建议您考虑选项2!