[英]LDAP PHP data from group
我是使用LDAP的新手,所以也许我只是在寻找合适的东西,否则这是不可能的。
我在Active Directory中工作,那里的学生分组学习。 现在,我需要来自某个班级所有学生的电子邮件地址。 我确实通过LDAP与Active Directory建立了连接,但是由于我实际上不知道如何进行处理,因此没有任何代码可显示。
由于它是Active Directory,因此必须先使用服务帐户进行绑定,然后才能搜索目录。 成功绑定之后,您可以像这样在名为“ ICS-1”的组中检索所有用户的电子邮件地址:
// $conn = ldap_connect()
// ldap_bind()
$basedn = "dc=rug,dc=nl"
$classname = "ICS-1"
$filter = "(&(objectClass=groupOfNames)(cn=" . $classname ."))"
$search = ldap_search($conn, $basedn, $filter, array("dn"))
$groupdn = $search[0]["dn"]
$filter = "(&(objectClass=user)(memberOf=" . $groupdn ."))"
$search = ldap_search($conn, $basedn, $filter, array("mail"))
$basedn
是存储您的组和用户的命名上下文。 请查阅可用的文档 ,以获取ldap_函数的正确语法。
您需要标识类的dn
,如下所示:
cn=classname,ou=classes,dc=domain,dc=com
当您拥有此信息时,检索邮件的最有效方法是:
// retrieve the members of this group :
$result = ldap_read ( $AD , "<dn of the class>" , (objectClass=*) , ["member"]);
// Get the entry
$entry = ldap_get_entries ( $AD ,$result );
/* The entry should be an array like this :
$entry = [
"count" => 1,
"0" => [
"dn" => "<dn of the class>",
"member" => [...]
]
]
*/
// After that you can iterate through the members to read each user entry
$mails = [];
for ($i=0; $i< $entry[0]["member"]["count"]; $i++) {
$studentDN = $entry[0]["member"][$i];
$r = ldap_read ( $AD , $studentDN , (objectClass=*) , ["mail"]);
$e = ldap_get_entries ( $AD ,$r );
// $e is structured similarly to the previous $entry so the mail is at :
$mails[] = $e[0]["mail"][0];
}
我对Active Directory不太了解,因此您应该仔细检查属性名称是否符合您的需求,但是总的来说,当您知道组的DN时,这是最快/最有效的遍历LDAP目录的方法。
由于LDAP目录已针对快速读取进行了优化,因此与在所有用户上搜索匹配的属性,然后读取所有邮件并返回所有内容相比,服务器更容易逐个读取每个条目以获取属性。一口气。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.