По служебной необходимости пришлось разбираться с LDAP запросами. Все подключается, но не находит ничего. вот текст: Код (PHP): $filter = "(&(sAMAccountName=Rubtsov.PN))"; // устанавливаем фильтр выборки из AD $attr = array("displayName", "mail"); // устанавливаем какие поля нам нужно получить из AD // устанавливаем соединение с ldap сервером $ldap_con = ldap_connect(ldaphost, ldapport) or die("Could not connect to LDAP server."); echo "-Соеденяюсь с LDAP сервером: OK</br>"; // Устанавливаем флажки протокола ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3); // AD Windows 2003 и выше ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0); //Определяет, следовать ли автоматически рефералам, возвращенным сервером LDAP. Зачем нужно - не понятно // авторизуемся в AD $ldapbind = ldap_bind($ldap_con) or die("LDAP bind failed..."); echo "-Авторизуюсь на LDAP сервере: OK</br>"; // Пытаемся что то получить из AD $dn = "DC=office,DC=ipe,DC=corp"; $search=ldap_search($ldap_con, $dn, $filter, $attr); // Ищем эти поля, получаем ссылку на результат $number_returned = ldap_count_entries($ldap_con,$search); // Получаем количество записей echo "-Получаю записи из AD: $number_returned</br>"; $info = ldap_get_entries($ldap_con, $search); Возникло несколько вопросов: 1. по строчке - $filter = "(&(sAMAccountName=Rubtsov.PN))"; Как правильно задавать поиск по параметрам? сколько скобок ставить? ставить ли знак& ? в одном примере вообще одни скобки были. Названия параметра брать из самой ActiveDirectory, как там атрибуты называются? Мне надо например делать поиск по логину, который в AD хранится, а у нас этот атрибут там называется sAMAccountName. 2. вопрос по параметру DN для поиска - $dn = "DC=office,DC=ipe,DC=corp"; в самой AD я так понял нужен параметр distiguishedName. Он в моем случае равен OU=Группа Илим,OU=Users,OU=BRK,DC=office,DC=ipe,DC=corp и это как я понял указание на область для поиска. Я правильно его прописал? Помогите пожалуйста разбораться, почему он нифига не находит. Пишет найдено 0. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Да я все это читал уже сто раз, все так и сделал, уже ни один десяток примеров пересмотрел. Но ничего не находит, хотя запись есть которую я ищу. Поэтому и обратился за помощью. Может я забыл чего сделать? Или может кодировка какая не совпадает?
Внимательно посмотрите как написано Код (PHP): ldap_connect(ldaphost, ldapport) Советую включить исключения " Ошибки, предупреждения и прочее... ". Дабы увидеть косяки кода, возможно, где - то есть косяки. Ибо если пых пытается найти неопределенные константы, то ошибок не будет и результат вернет 0. Перепишите с нуля, сначала добейтесь результата соединения с базой, а потом результат возвращения из базы, прежде, чем искать в базе, тогда вы поймете, где допустили ошибки.
Переделал код Код (PHP): $attr = array("displayName", "mail"); // устанавливаем какие поля нам нужно получить из AD // устанавливаем соединение с ldap сервером $ldap_con = ldap_connect(ldaphost, ldapport) or die("Could not connect to LDAP server."); echo "-Соеденяюсь с LDAP сервером:".$ldap_con."</br>"; // Устанавливаем флажки протокола ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3); // AD Windows 2003 и выше ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0); //Определяет, следовать ли автоматически рефералам, возвращенным сервером LDAP. Зачем нужно - не понятно // авторизуемся в AD $ldapbind = ldap_bind($ldap_con); if ($ldapbind) { echo "LDAP-привязка успешна..."; } else { echo "LDAP-привязка не удалась..."; } // Пытаемся чтото получить из AD $dn = "DC=office,DC=ipe,DC=corp"; $search=ldap_search($ldap_con, $dn, '(|(objectclass=person)(samaccountname=*))', $attr); // Ищем эти поля, получаем ссылку на результат $number_returned = ldap_count_entries($ldap_con,$search); // Получаем количество записей echo "-Получаю записи из AD: $number_returned</br>"; $info = ldap_get_entries($ldap_con, $search); echo $info; Получаю вот такое: -Соеденяюсь с LDAP сервером:Resource id #7 LDAP-привязка успешна... -Получаю записи из AD: 0 Array Никаких ошибок нет, в настройках все показывать выставлено. А никаких проблем с кодировкой там быть не может? Может в AD какая-нибудь кодировка другая? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Решил проблему. Оказывается AD не принимает анонимное подключение. Причем пишет что все нормально, но ничего не находит. Указал учетные данные и поиск заработал. Осталось дело за малым, убедить админов создать служебную учетку для доступа.