Получение данных из Active Directory посредством PHP
Сам за себя лучше всего расскажет мой кусок кода. Все сдобрено максимально большим количеством комментариев. По формату построения LDAP запросов полезно почитать вот этот мануал. Ничего толковее к сожалению найти не смог.
Вот результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
$ldap_user='gribov.p'; $ldap_pass='ргшкуцудцс'; $filter = "(telephonenumber=*9657400222*)"; // устанавливаем фильтр выборки из AD //(company=*Русский Север*) $attr=array("displayname","useruid2","title","telephonenumber","department","mail","jpegphoto","homephone"); // устанавливаем какие поля нам нужно получить из AD // устанавливаем соединение с ldap сервером $ldap_con = ldap_connect($cfg->ldap) 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 $dn="$cfg->domain1\\$ldap_user"; $ldapbind = ldap_bind($ldap_con, $dn, $ldap_pass) or die("LDAP bind failed..."); echo "-Авторизуюсь на LDAP сервере: OK</br>"; // Пытаемся чтото получить из AD $base_dn = "DC=$cfg->domain1, DC=$cfg->domain2"; $search=ldap_search($ldap_con, $base_dn, $filter,$attr); // Ищем эти поля, получаем ссылку на результат $number_returned = ldap_count_entries($ldap_con,$search); // Получаем количество записей echo "-Получаю записи из AD: $number_returned</br>"; $info = ldap_get_entries($ldap_con, $search); // получаем результат в переменную $info // дальше парсим полученный массив // Результирующий массив с пользователями из AD // "displayname","useruid2","title","telephonenumber","department","mail","jpegphoto","homephone" for ($i=0; $i<$info["count"]; $i++) { $res=$info[$i]; $m_name=$res["displayname"]; echo "Имя: $m_name[0]</br>"; $m_tab=$res["useruid2"]; echo "Табельный: $m_tab[0]</br>"; $m_title=$res["title"]; echo "Должность: $m_title[0]</br>"; $m_tel=$res["telephonenumber"]; echo "Телефон: $m_tel[0]</br>"; $m_dep=$res["department"]; echo "Департамент: $m_dep[0]</br>"; $m_mail=$res["mail"]; echo "Email: $m_mail[0]</br>"; $m_photo=$res["jpegphoto"]; $m_hometel=$res["homephone"]; echo "Дом.тел: $m_hometel[0]</br>"; file_put_contents('img.jpg',$m_photo[0]); echo "<img src='img.jpg'>"; echo "<hr>"; }; |
Мне нужно получить доменные группы, в которых состоит сотрудник. Что я сделал:
внутри перебора массива (for ($i=0; $i<$info["count"]; $i++)) я написал следующее:
for ($m=0; $m<$info["count"];$m++) {
$m_memberof=$res["memberof"];
echo "memberOf: $m_memberof[$m]»;
};
Но если сделать вывод echo $info[«count»]; будет всегда 1 и он делает вывод одной группы. Если заменить на числовое значение (что не правильно), то группы он начинает выводить. Как исправить?