2011-03-16 193 views
2

我正在嘗試創建一個PHP腳本,它將返回屬於Active Directory中特定組的一部分的每個成員的一些詳細信息。PHP LDAP獲取作爲組成員的成員的用戶詳細信息

我沒有任何問題連接並顯示組成員的姓名(CN),但是當涉及顯示諸如電話,電子郵件和用戶名等詳細信息時,我被卡住了。

這是我正在嘗試的代碼。任何人都可以看到我做錯了什麼?

<?php 
$ldap_server = "AD_Server.domain.pri:389"; 
$auth_user = "[email protected]"; 
$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 (!([email protected]_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>"; 
} 
?> 
+0

你試過用print_r/vardump傾出'$ info'數組來看看裏面有什麼嗎? – 2011-03-16 15:05:35

+1

$ info數組只包含「Array([count] => 0)」,因此它看起來像腳本對篩選器不滿意。 – Brigante 2011-03-16 15:09:38

回答

7

工作了使用由Sam J Levy創建的優良功能。

下面是最終的工作代碼。

<?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'); 

?> 
+2

很高興你發現我的功能很有用,我注意到你的帖子中的鏈接不再有效,可以在http://samjlevy.com/2011/02/using-php-and-ldap-to-list-of找到它。 - 成員-的-AN-有源目錄組/ – samJL 2011-04-29 06:33:12

相關問題