PHP LDAP获取部件的用户的信息是一组中的一员 [英] PHP LDAP Get user details of member which is a member of a group

查看:1459
本文介绍了PHP LDAP获取部件的用户的信息是一组中的一员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个PHP脚本,将返回每个成员是在我们的Active Directory中的特定组的一部分的一些细节。

我没有问题,连接并显示该组成员的名称(CN),但是当涉及到​​显示详细信息,如电话,电子邮件,用户名我卡住了。

下面是我的code我试图用。任何人都可以看到我在做什么错了?

 < PHP
$ LDAP_SERVER =AD_Server.domain.pri:389;
$ AUTH_USER =user@domain.pri;
$ auth_pass =密码;

$ base_dn =OU =即时通讯群组,OU =全局,DC =域,DC = PRI;
$过滤器=(及(objectCategory属性=用户)(的memberOf = IM-ALL_USERS));

//连接到服务器
如果(!($连接= @ ldap_connect($ LDAP_SERVER))){
     死亡(无法连接到LDAP服务器);
}

//绑定到服务器
如果(!($绑定=的ldap_bind($连接,$ AUTH_USER,$ auth_pass))){
     死亡(无法绑定到服务器);
}

//搜索活动目录
如果(!($搜索= ldap_search($连接,$ base_dn,$滤))){
     死亡(无法搜索LDAP服务器);
}

$ number_returned = ldap_count_entries($连接,$搜索);
$信息= ldap_get_entries($连接,$搜索);

回声条目数返回是。 $ number_returned&其中; P>中。

为($ i = 0; $ I< $信息[伯爵]; $ I ++){
   回声的名字是:。 $信息[$ i] [给定名称] [0]< BR>中。
   回声显示名称为:。 $信息[$ i] [显示名称] [0]< BR>中。
   回声电子邮件是:。 $信息[$ i] [电子邮件] [0]< BR>中。
   回声电话号码是:。 $信息[$ i] [telephonenumber] [0]< P>中。
}
?>
 

使用通过的解决方案

的工作了-of成员 - - 一个活跃的目录,组/相对=nofollow>山姆Ĵ利维

下面是工作的最后code。

 < PHP

功能explode_dn($的dn,$ with_attributes = 0)
{
    $结果= ldap_explode_dn($ DN,$ with_attributes);
    的foreach($结果作为$关键=> $值),$结果[$关键] = preg_replace(/ \\\([0-9A发-F] {2})/ E,' '.CHR(hexdec('\\ 1'))。',$值);
    返回$结果;
}

功能get_members($组,$用户,$密码){
    $ ldap_host =LDAPSERVER;
    $ ldap_dn =OU = some_group,OU = some_group,DC =公司,DC = COM;
    $ base_dn =DC =公司,DC = COM;
    $ ldap_usr_dom =@ company.com;
    $ LDAP = ldap_connect($ ldap_host);

    ldap_set_option($ LDAP,LDAP_OPT_PROTOCOL_VERSION,3);
    ldap_set_option($ LDAP,LDAP_OPT_REFERRALS,0);

    的ldap_bind($ LDAP,$ USER $ ldap_usr_dom,$密码);
    $结果= ldap_search($ LDAP,$ ldap_dn,CN =$组);
    $ member_list = ldap_get_entries($ LDAP,$结果);

    $脏= 0;
    $ group_member_details =阵列();

    的foreach($ member_list [0] ['成员']为$成员){
        如果($脏== 0){
            $脏= 1;
        } 其他 {
            $ member_dn = explode_dn($成员);
            $ member_cn = str_replace函数(CN =,,$ member_dn [0]);
            $ member_search = ldap_search($ LDAP,$ base_dn,(CN =$ member_cn)。);
            $ member_details = ldap_get_entries($ LDAP,$ member_search);
            $ group_member_details [] = array($member_details[0]['givenname'][0],$member_details[0]['sn'][0],$member_details[0]['telephonenumber'][0],$member_details[0]['othertelephone'][0]);
        }
    }
    ldap_close($ LDAP);
    返回$ group_member_details;
}

//指定组从哪里获得的成员和一个用户名和密码的权利进行查询
$结果= get_members(组名,用户名,密码);

//下面将创建一个由$ group_member_details细节的XML文件
$ XML = simplexml_load_string(< XML版本='1.0'>吗?\ n<通讯录>< /通讯录>);
$版= $基于XML>的addChild('版本','1');

的foreach($结果为$ E){
    $触点= $基于XML>的addChild('联系人');
    $接触式>的addChild('姓',$ E [0]);
    $接触式>的addChild('姓氏',$ E [1]);
    $手机= $接触式>的addChild(手机);
    如果($ E [3] ==''){
                $电话 - >的addChild('联系号码','0');
        } 其他 {
                $电话 - >的addChild('联系号码',$ E [3]);
        }
    $电话 - >的addChild('accountindex','0');
    $手机= $接触式>的addChild(手机);
    如果($ E [2] ==''){
        $电话 - >的addChild('联系号码','0');
    } 其他 {
        $电话 - >的addChild('联系号码',$ E [2]);
    }
    $电话 - >的addChild('accountindex','1');
    $接触式>的addChild('集团','0');
    $接触式>的addChild('PhotoUrl,空);
}

$基于XML> asXML('phonebook.xml');

?>
 

I'm trying to create a PHP script that will return some details of each member that is part of a specific group in our Active Directory.

I have no problem connecting and display the names (CN) of the group members but when it comes to displaying details such as telephone, email and username I'm stuck.

Here's my code I'm trying with. Can anyone see what I'm doing wrong?

<?php
$ldap_server = "AD_Server.domain.pri:389";
$auth_user = "user@domain.pri";
$auth_pass = "password";

$base_dn = "OU=IM Groups,OU=GLOBAL,DC=domain,DC=pri";
$filter = "(&(objectCategory=user)(memberOf=IM-ALL_USERS))";

// connect to server
if (!($connect=@ldap_connect($ldap_server))) {
     die("Could not connect to ldap server");
}

// bind to server
if (!($bind = ldap_bind($connect, $auth_user, $auth_pass))) {
     die("Unable to bind to server");
}

// search active directory
if (!($search = ldap_search($connect, $base_dn, $filter))) {
     die("Unable to search ldap server");
}

$number_returned = ldap_count_entries($connect,$search);
$info = ldap_get_entries($connect, $search);

echo "The number of entries returned is ". $number_returned."<p>";

for ($i=0; $i<$info["count"]; $i++) {
   echo "Name is: ". $info[$i]["givenname"][0]."<br>";
   echo "Display name is: ". $info[$i]["displayname"][0]."<br>";
   echo "Email is: ". $info[$i]["mail"][0]."<br>";
   echo "Telephone number is: ". $info[$i]["telephonenumber"][0]."<p>";
}
?>

解决方案

Worked it out using an excellent function created by Sam J Levy.

Here's the final code that worked.

<?php

function explode_dn($dn, $with_attributes=0)
{
    $result = ldap_explode_dn($dn, $with_attributes);
    foreach($result as $key => $value) $result[$key] = preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value);
    return $result;
}

function get_members($group,$user,$password) {
    $ldap_host = "LDAPSERVER";
    $ldap_dn = "OU=some_group,OU=some_group,DC=company,DC=com";
    $base_dn = "DC=company,DC=com";
    $ldap_usr_dom = "@company.com";
    $ldap = ldap_connect($ldap_host);

    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION,3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS,0);

    ldap_bind($ldap, $user . $ldap_usr_dom, $password);
    $results = ldap_search($ldap,$ldap_dn, "cn=" . $group);
    $member_list = ldap_get_entries($ldap, $results);

    $dirty = 0;
    $group_member_details = array();

    foreach($member_list[0]['member'] as $member) {
        if($dirty == 0) {
            $dirty = 1;
        } else {
            $member_dn = explode_dn($member);
            $member_cn = str_replace("CN=","",$member_dn[0]);
            $member_search = ldap_search($ldap, $base_dn, "(CN=" . $member_cn . ")");
            $member_details = ldap_get_entries($ldap, $member_search);
            $group_member_details[] = array($member_details[0]['givenname'][0],$member_details[0]['sn'][0],$member_details[0]['telephonenumber'][0],$member_details[0]['othertelephone'][0]);
        }
    }
    ldap_close($ldap);
    return $group_member_details;
}

// Specify the group from where to get members and a username and password with rights to query it
$result = get_members("groupname","username","password");

// The following will create an XML file with the details from $group_member_details
$xml = simplexml_load_string("<?xml version='1.0'?>\n<AddressBook></AddressBook>");
$version = $xml->addChild('version', '1');

foreach($result as $e) {
    $contact = $xml->addChild('Contact');
    $contact->addChild('FirstName', $e[0]);
    $contact->addChild('LastName', $e[1]);
    $phone = $contact->addChild('Phone');
    if ($e[3] == '') {
                $phone->addChild('phonenumber', '0');
        } else {
                $phone->addChild('phonenumber', $e[3]);
        }
    $phone->addChild('accountindex', '0');
    $phone = $contact->addChild('Phone');
    if ($e[2] == '') {
        $phone->addChild('phonenumber', '0');
    } else {
        $phone->addChild('phonenumber', $e[2]);
    }
    $phone->addChild('accountindex', '1');
    $contact->addChild('Group', '0');
    $contact->addChild('PhotoUrl', 'empty');
}

$xml->asXML('phonebook.xml');

?>

这篇关于PHP LDAP获取部件的用户的信息是一组中的一员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆