2011-12-28 27 views
2

私は、Active Directoryのユーザ/従業員リストへの接続を確立しています。私はこれを.NETでやったことがありますが、私のPHPアプリケーションでうまく動作しません。PHP ldap_searchが結果を返さない

私はconsistantly 0私は、フィルタとしてのsAMAccountNameとのsAMAccountNameを使用してみました

のカウントを取得し、これは結果を変更しません。

$ ldapを変更してもサーバが見つからないため、接続に成功しました。

有効な資格情報を使用しています。$ authUserまたは$ authPathを変更すると、許可されたエラーメッセージが表示されるためです。

はldap_bindは(私は推測)、それは検索を行い行い、ここで

0のカウントを出力するので、働いている私のコードです:あなたのフィルターが広すぎるかしら

<?php 
try{ 
    $ldap = "vmc-dc.CompanyName.vmc"; 
    $authUser = "vmc\\MyUsername"; 
    $authPass = "MyPassword"; 
    $baseDn = "dc=vmc-dc,dc=CompanyName,dc=com"; 
    $filter="(&(objectClass=user)(samaccountname=*))"; 

    $conn = ldap_connect($ldap, 389) ; 

    if ($conn) { 

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

     // binding to ldap server 
     $ldapbind = ldap_bind($conn, $authUser, $authPass); 

     // verify binding 
     if ($ldapbind) { 
      //$sr=ldap_read($conn, $baseDn, $filter); 
      $sr=ldap_search($conn, $baseDn, $filter); 

      $number_returned = ldap_count_entries($conn,$sr); 
      echo "Count: " . $number_returned . "<br/>"; 

      $entry = ldap_get_entries($conn, $sr); 
      ldap_close($conn); 
      echo "value = '" . $entry[0] . "'"; 

     } else { 
      echo "LDAP conn ok..."; 
     } 
    } 
} catch (Exception $e) { 
} 
?> 
+0

ldapsearchコマンドラインツールを使用して、目的のデータを取得できることを確認します。 'ldapsearch -h hostname -p port -b baseDn -s sub -D dn -w password"(&(objectClass = user)(samaccountname = )) "1.1"。 –

+0

すべてのユーザが必要な場合は、 '(&(objectCategory = person)(objectClass = user))'がフィルタの最善の策になります。 –

+0

Brianの観点からは、objectCategory = personの必要性はコンピュータオブジェクトを除外することです。 – geoffc

答えて

0

、すべてのユーザークラスオブジェクト(コンピューターを含みBrian Desmondのポイントに)、1000を超えるオブジェクトが返されます。この場合、ADはエラーになり、何も返しません。返されたエラーが出ると思いますので、そうは思わないでしょう。しかし、より拘束されたフィルタやスタンドアロンのLDAPツールを使用した繰り返しは、このアイデアを検証するのに役立ちます。

関連する問題