即使ldap_connect()成功,PHP ldap_bind()也会失败

时间:2017-01-05 09:34:26

标签: php ldap openldap

正如标题中所述,ldap_connect()函数工作正常,但是当我尝试使用ldap_bind()时,匿名和凭证PHP将只给我

  

无法联系LDAP服务器

如何进一步调试此问题?

使用ldap浏览器时,我可以连接并绑定,没有任何问题,似乎没有其他错误消息。

我尝试使用协议版本3进行绑定。

1 个答案:

答案 0 :(得分:1)

ldap_connect确实实际连接到LDAP服务器,但只检查您提供的参数是否有意义#34;。所以当你提供f.e.它会失败300.300.300.300作为IP地址。但那就是它。尝试连接,即使该函数被称为ldap_connect。这有历史原因。

首次尝试连接通常是在ldap_bind上完成的,这就是连接问题通常出现在这里的原因。

请注意,您应该使用LDAP-URI作为ldap_connect的参数。第二个参数($port)已弃用,仅在您将IP地址或FQDN作为第一个参数传递时使用(您不应该这样做,因为您无法指定f.e.LDAPS)。所以你应该有类似ldap_connect('ldaps://ldap.example.org:639');的东西。

我通常首先通过fsockopen检查我是否可以像这样到达给定端口上的服务器:```

$res = fsockopen('ldap.example.org', 639, null, null, 5);
if (false === $res) {
    throw new Exception('server could not be reached within 5 seconds');
}
fclose($res);

如果没有抛出异常,服务器就可用,并且凭据更有可能是错误的。

除此之外,您始终可以使用ldap_errorldap_errno来(通常)获取有关上一个错误的更详细信息。