2017-01-03 17 views
0

я получаю:PHP <5.4 LDAP 1000 строк ограничить

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

При попытке использовать ldap_search на >1000 записей.

Найдено результатов для >5.4, но все еще не найдено для < 5.4 PHP Version.

P.S. не может обновить версию сервера. Также попытался установить предел:

ldap_set_option($ldap_connect, LDAP_OPT_SIZELIMIT, 100); 

но оно приносит такое же предупреждение.

+3

Проверьте это: http://stackoverflow.com/questions/24913366/php-ldap-overcoming-size-limit – Michael

+0

В моем это не полное решение из-за настроек сервера AD, но установка параметра $ sizelimit равным 0 и применение фильтров, например по письмам решает проблему. Например. получая все записи с помощью «a», «b», «c» в каждом поисковом муравьике, помещая их в один массив. – darjus

ответ

1

Вам, кажется, не повезло!

Вы можете изменить SizeLimit вашего клиента любое значение вы хотите, но вы не можете установить SizeLimit из сервера. Это возможно только для администратора LDAP-сервера, и у них обычно есть веская причина ограничить возвращаемый результат. Этот серверный лимит обычно составляет 1000 записей. Установив ldap_set_option($ldap_connect, LDAP_OPT_SIZELIMIT, 100);, вы можете уменьшить этот предел до 100 возвращаемых записей, но вы не можете расширить его за пределы сервера.

Единственный способ получить «больше» результатов - использовать paged results. Это означает, что вы запрашиваете LDAP-сервер несколько раз, каждый раз получая максимальный результат, но каждый раз, начиная с первой записи, которую вы еще не получили. В вашем PHP-коде вы можете агрегировать результаты, чтобы, наконец, иметь более 1000 записей.

Но это доступно только с PHP 5.4. Кажется, вам не повезло.

В моих глазах есть три решения:

  1. Патч LDAP-расширение и скомпилировать его, чтобы ваш PHP-версия может использовать страничный-результаты,
  2. Обновление к supported PHP-Version или
  3. Убедите LDAP-Admin поднять серверный сизелимит.

Поскольку 3 обычно очень тяжелый и 1 занимает много времени, я настоятельно рекомендую вам рассмотреть вариант 2!

+0

И 4. Использовать фильтры LDAP для получения фильтрованных записей, а затем присоединить их к 1 массиву. Я использовал '(& (cn = '*') (samaccountname =. $ FirstLetter." * "))' В алфавитном foreach. Тестирование этого решения, похоже, работает :-) – darjus

+0

В зависимости от количества пользователей, которые могут не помочь.Но это действительно возможность, когда вы не используете другой фильтр. Удачи! – heiglandreas

1

решение для 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/>"; 
     } 
    } 

Также вы добавить номера фильтр, например, phoneNumber, это зависит от того, сколько записей у вас есть. Если у вас есть гораздо больше записей, вы можете попробовать использовать больше фильтров петель с помощью первых и секундных писем, таких как sAMAccountName=' .$letter.$letter2.'*

 Смежные вопросы

  • Нет связанных вопросов^_^