2016-12-06 4 views
0

Я был возиться с ldap_search и PHP, и я заметил, что даже если вы можете ограничить количество результатов (с помощью атрибута $ sizelimit), я не могу выбрать диапазон для этого ограничения по размеру.Диапазон фильтра LDAP PHP?

Код:

$result = ldap_search($ldapconnect,$ldaptree, "(|(cn=a*)(cn=b*))", $attributes, 0, 100) or die ("Error in search query: ".ldap_error($ldapconnect)); 

Чтобы быть более конкретным. Я ищу базу данных LDAP, которая имеет 60 тысяч записей, я всегда могу сделать array_slice для предыдущего результата, но это требует навсегда рассмотрения того, что он все еще тянет почти из всей БД. Есть ли способ захватить 2-й 100 записей, а третий и так далее?

Спасибо!

Джо

ответ

0

Это невозможно отфильтровать от определенного диапазона или смещение для запроса через LDAP с PHP. Вы можете использовать paging (см. Пример № 2) и пропустить определенные результирующие наборы в цикле результатов и сохранять только определенные результаты. Тогда у вас есть то, что вам нужно, прервать операцию подкачки, сделав ldap_control_paged_result($link, 0);. Однако это все равно будет неэффективным.

LDAP поддерживает концепцию VLV (Virtual List View), которая имеет более сложные параметры, чем простой метод подкачки. Используя VLV, вы можете определить смещение и определенный диапазон. Был даже патч представлен для добавления поддержки ВВЛ в модуль LDAP в РНР, но никто не принимал никаких действий на нем:

https://bugs.php.net/bug.php?id=62853&edit=2

Помимо этого, мой лучший совет должен был бы сделать ваш запрос более эффективным использованием a objectClass и objectCategory в фильтре. Кроме того, в поисковом фильтре требуется не менее 2 или 3 символов, прежде чем он попытается выполнить запрос.

+0

Отлично Ответ. +1. Фильтр из 2 или 3 символов работает не очень хорошо, так как мне нужен полный список из 60k, и вокруг него нет никакого способа. Кажется, что в ближайшее время ничего не изменится в этом VLV ... Спасибо в любом случае! Ценить это. –