2015-10-14 2 views
0

Мне нужно получить только значения департаментов из Active Directory с использованием ldap. Один из способов - использовать этот фильтр $filter = '(objectClass=user)'; и установить параметр атрибутов ldap_search() на array('department') Проблема в том, что я получаю все записи, а некоторые из них дублируются. Есть ли у кого-то предложения? Если это помогает, я использую Symfon2, и у меня есть библиотека ldap.Как получить список департаментов в Active Directory с помощью PHP?

+0

Что именно ваша проблема? У вас проблемы с ldap или вы не знаете, как удалить дубликаты с помощью PHP? –

+0

Я не хочу удалять дубликаты, мне нужен запрос, который я могу использовать для получения всех отделов без дубликатов, поэтому мне не нужно будет терять время, удалив их позже. –

+0

Можете ли вы отредактировать свое сообщение и включить текущий код, который используете? – Twisty

ответ

0

Невозможно спросить AD для дедуплицированного списка значений department. Самое близкое, что вы можете сделать, это фильтр: (&(objectCategory=person)(objectClass=user)(department=*)), а затем дедуплицировать список на стороне клиента. Обратите внимание, что это не даст вам значений отдела для контактов, групп или компьютеров, например. Если вам это нужно, вам нужно будет обновить запрос, чтобы включить те типы объектов, которые вас интересуют.

+0

Да, но используя это, я получу все отделы всех пользователей. Я думал, что, возможно, есть способ извлечь не информацию о пользователях и оттуда, чтобы взять все, что я хочу, но просто запросить конкретное поле, которое я хочу. –

+1

К сожалению, это невозможно. –

1

С помощью вашего фильтра вы получаете LDAP-записи для пользователей, у которых есть определенный атрибут (отдел в вашем случае) , Таким образом, ваш результат - список пользовательских узлов. Невозможно уменьшить этот список пользовательских узлов, чтобы иметь отличный список атрибутов, поскольку это означает удаление пользователей из списка. Какие из них нужно удалить, поскольку вы явно искали всех пользователей?

Таким образом, единственный путь, чтобы использовать что-то вроде следующего (непроверенного) кода-фрагмента кода, чтобы получить список из такого поиска результата:

$departments = []; 
$entry = ldap_first_entry($connect, $result); 
do { 
    $attributes = ldap_get_attributes($connect, $entry); 
    $departments[$attributes['department'][0]] = $attributes['department'][0]; 
} while ($entry = ldap_next_entry($connect, $entry)); 
print_R($departments); 
Смежные вопросы