繁体   English   中英

组中的LDAP PHP数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM