为什么此LDAP查询返回的数组只有0

时间:2015-03-20 20:13:29

标签: php active-directory ldap openldap

我是LDAP和Active Directory的新手。我尝试使用以下代码获取经过身份验证的用户的电子邮件ID。但是当我运行它时,我得到的只是一个带有0的数组。

这是代码

$server ='ldaps://DOMAIN'; 
$username = 'DOMAIN\UID'; 
$password = 'PASSWORD';

$base_dn = 'dc=DOMAIN';
$search_filter = 'dn=UID'; 
$attributes = ['mail']; 

$ldap = ldap_connect($server);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, $username, $password); 
$search = ldap_search($ldap, $base_dn, $search_filter, $attributes);
$data = ldap_get_entries($ldap, $search);

foreach($data as $dataPoint)
    {
        echo $dataPoint;
        echo "<hr>";
    }

这只输出一个0,下面有一条水平线。

最具挑战性的是,没有任何错误消息,我不熟悉LDAP或Active Directory。

知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

我看到一些可能导致上述代码出现问题的事情:

  • 你真的想要使用ldaps://吗?通常这不是你想要做的。如果您想使用加密连接,请使用ldap_start_tls,并且应在ldap_connect之后进行通话。出于测试目的,我只需将其更改为ldap://
  • 您的$base_dn变量似乎缺少域的一部分。这不应该是您的域的NETBIOS名称,而是完全限定的域名。因此,如果您的域名为domain.com,那么基本dn将为dc=domain,dc=com
  • 您的搜索过滤器($search_filter)格式不正确。如果您尝试从给定帐户名称的LDAP中检索用户对象,则可以使用以下搜索过滤器:(sAMAccountName=UID)

为了更好地了解可能出现的问题,您可以使用ldap_error并在连接后调用它:echo "Error: ".ldap_error($ldap);。您可以在任何与LDAP相关的调用之后执行此操作,以获取有关可能出错的更多信息。