使用PHP ldap_bind函数获取错误“无法联系LDAP服务器”

时间:2011-11-24 06:17:21

标签: php active-directory ldap

我必须将Active Directory用户与服务器绑定。我可以成功连接服务器,但不知何故无法绑定用户。我不知道是什么原因。

以下是我的PHP源代码:

$basedn="dc=domain,dc=com";
echo "Connecting ...<br/>";
$ds=ldap_connect("192.XXX.XXX.XX");  // must be a valid LDAP server!
echo "connect result is ".$ds."<br/>";

if($ds){
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    $lb=ldap_bind($ds,"cn=xyz,o=domain.com","password");
    if ($lb) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP-Errno: " . ldap_errno($ds) . "<br />";
        echo "LDAP-Error: " . ldap_error($ds) . "<br />";
    }       

    ldap_close($ds);
}

您能否告诉我我在ldap_bind函数中通过用户名参数究竟是什么?请提供任何帮助我这样做的源代码? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我所在的域控制器上运行的是Server 2008 R2,该域最初是2003,并且必须使用login @ domain格式。我验证了DN是正确的,2008之前的域管理员帐户可以使用DN进行连接。但是,除非使用了登录@域格式,否则非管理员无法使用。

现在,我的代码尝试:

$ lb = ldap_bind($ ds,“cn = login,o = domain.com”,“password”);

然后如果找不到任何内容,请尝试:

$ lb = ldap_bind($ ds,“login@domain.com”,“密码”);

这是一个快速修复,同时我解决了DN无法正常工作的原因。我建议即使您使用的是2008,也请尝试使用2003格式。

答案 1 :(得分:0)

在Windows Server 2003上使用Active Directory,而不是:

$lb = ldap_bind($ds, "cn=login,o=domain.com", "password");

我不得不使用:

$lb = ldap_bind($ds, "login@domain.com", "password");

但是,您的错误消息(无法联系LDAP服务器)看起来像您没有通过PHP脚本向ldap_connect()提供服务器地址可访问 (检查Windows防火墙等)