2011-12-28 71 views
2

我正在建立与Active Directory用户/员工列表的连接。我通过.NET完成了这项工作,但无法在我的PHP应用程序中使用它。php ldap_search不返回结果

我consistantly得到0

我使用SAM帐户和SAM帐户作为过滤器尝试计数,这不会改变结果。

我成功连接,为改变$ LDAP将不再能够找到服务器。

我使用的有效凭证,如改变$ AUTHUSER或$ authPath提供授权的错误消息。

的的ldap_bind(我相信)工作,因为它执行搜索和输出的0.1

这里计数是我的代码:

<?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主机名-p端口-b的baseDn -s子-D DN -w密码“(&(objectClass的=用户)(Sam帐户= * ))“1.1”。 –

+0

如果你想要所有的用户,'(&(objectCategory = person)(objectClass = user))'是你最好的选择。 –

+0

对于Brian的观点,对objectCategory = person的需求是排除计算机对象。 – geoffc

回答

0

我不知道,如果你的过滤器是过于宽泛,所有的用户类对象(包括计算机,Brian Desmond的观点),并返回超过1000个找到的对象。在这种情况下,AD将会出错,并不会返回任何内容我希望你会得到一个返回的错误,所以这可能不太可能。但是更受限制的过滤器和/或重复使用独立的LDAP工具可能有助于验证此想法。