2012-11-15 19 views
6
$ldaphost = "my_host_name"; 
$ds=ldap_connect($ldaphost) or die("Could not connect to $ldaphost"); 
ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0); 
ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 

if ($ds) 
{ 
    $basedn = 'my_dc_string'; 
    $samaccountname = 'my_user_name'; 
    $filters = "(samaccountname={$samaccountname})"; 
    $result = ldap_search($ds, $basedn, $filters); 
} 

PHPを使用してLDAPからすべてのユーザーのリストを取得するにはどうすればよいですか?上記のコードは、この警告PHPを使用してLDAPディレクトリからユーザのリストを取得するには?

を与えるldap_searchを関数に失敗し、「警告:ldap_searchを():検索:オペレーションエラー」

自分のユーザー名、ldaphostになどが正しいです。私はフィルターについては確信していません。 php.netから

答えて

14
/** 
* Get a list of users from Active Directory. 
*/ 
$ldap_password = 'PASSWORD'; 
$ldap_username = '[email protected]'; 
$ldap_connection = ldap_connect(HOSTNAME); 
if (FALSE === $ldap_connection){ 
    // Uh-oh, something is wrong... 
} 

// We have to set this option for the version of Active Directory we are using. 
ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); 
ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); // We need this for doing an LDAP search. 

if (TRUE === ldap_bind($ldap_connection, $ldap_username, $ldap_password)){ 
    $ldap_base_dn = 'DC=XXXX,DC=XXXX'; 
    $search_filter = '(&(objectCategory=person)(samaccountname=*))'; 
    $attributes = array(); 
    $attributes[] = 'givenname'; 
    $attributes[] = 'mail'; 
    $attributes[] = 'samaccountname'; 
    $attributes[] = 'sn'; 
    $result = ldap_search($ldap_connection, $ldap_base_dn, $search_filter, $attributes); 
    if (FALSE !== $result){ 
     $entries = ldap_get_entries($ldap_connection, $result); 
     for ($x=0; $x<$entries['count']; $x++){ 
      if (!empty($entries[$x]['givenname'][0]) && 
       !empty($entries[$x]['mail'][0]) && 
       !empty($entries[$x]['samaccountname'][0]) && 
       !empty($entries[$x]['sn'][0]) && 
       'Shop' !== $entries[$x]['sn'][0] && 
       'Account' !== $entries[$x]['sn'][0]){ 
       $ad_users[strtoupper(trim($entries[$x]['samaccountname'][0]))] = array('email' => strtolower(trim($entries[$x]['mail'][0])),'first_name' => trim($entries[$x]['givenname'][0]),'last_name' => trim($entries[$x]['sn'][0])); 
      } 
     } 
    } 
    ldap_unbind($ldap_connection); // Clean up after ourselves. 
} 

$message .= "Retrieved ". count($ad_users) ." Active Directory users\n"; 
+0

これは動作します...結果セットを除いて、それに探して、空です。ありがとうございます –

+0

素晴らしいです。それは働いた。今すぐオフにすべてのユーザーのすべての情報を取得する –

+0

優れたサンプル、ありがとうございます。 – Dax

1

ldap_connect() // establish connection to server 
    | 
ldap_bind()  // anonymous or authenticated "login" 
    | 
do something like search or update the directory 
and display the results 
    | 
ldap_close()  // "logout" 

あなたは、接続を閉じるには、すべてのoperartion(S)ldap_close()後&をログインするldap_bind()を使用する必要があります。

Example usage here.

関連する問題