ldap_connect() php 中的函数接受任何值并且不会抛出错误
ldap_connect() function in php accepts any value and doesnt throw an error
我正在编写一个 php 代码来连接到我的 LDAP 服务器。
$adServer = $ini['ldap'];
$ldap = ldap_connect($adServer) or die("Could not connect to {$adServer}");
$adServer
的值我正在从配置文件中获取。
当我传递空白值或任何其他随机值(如 "Hello")时,看起来 ldap_connect()
没有抛出错误。
我尝试给出以下代码来检查是否生成了任何错误消息。
echo ldap_error($ldap)
它总是说 'Success'。
因此我无法验证连接是否已建立到 LDAP 服务器并抛出相应的错误消息。
在什么情况下 'die' 会触发 ldap_connect()
函数。
如果配置文件中提供的服务器名称不起作用,我想向最终用户抛出适当的错误消息。
注意:PHP
我使用的是 5.6 版
ldap_connect()
当它可以将提供的参数解析为 URL 时,总是 returns 资源。第一次实际使用该资源(因此建立连接并检测到可能的故障)是在使用 ldap_bind()
时。
作为 ldap_connect()
几乎总是 returns 一个资源句柄(如 http://php.net/ldap_connect 中所述)你的构造 die()
不会做你想做的事。只有当提供的参数不能在内部解析为 URL 时,它才会起作用。所以只要您提供一个 看起来 像服务器名或 URL 的字符串,一切正常。
我总是在失败后检查 ldap_bind()
究竟发生了什么,然后根据 返回的错误抛出异常。或者,我有时会在使用 ldap_bind()
之前进行检查,方法是使用 f.i fsockopen()
打开(并关闭)连接。如果无法打开该连接,则 ldap 连接也将不起作用。
所引用的 php 文档中的示例具有误导性,看来我们必须更改它们。因此,感谢您发现并提出问题!
顺便说一句:例如,调用 @ldap_connect('ldap:');
是 die()
可以工作的情况,因为它是一个不完整的 URL。或者使用带空格的字符串。
我找到了一种比使用模具更好的身份验证方法。
在 ldap connect 之后,我们将继续使用 ldap bind。如果绑定失败,那么我们可以检查 ldap 错误。
$ldap = @ldap_connect($adServer);
$bind = @ldap_bind ($ldap, $ldaprdn, $password);
if (!$bind) { // If Bind Failed then.
if (ldap_errno ($ldap) == 49 {
//Invalid Credentials
} else {
//LDAP Connection to LDAP Server Failed
}
}
有关所有 LDAP 错误编号的列表,您可以查看 here
我正在编写一个 php 代码来连接到我的 LDAP 服务器。
$adServer = $ini['ldap'];
$ldap = ldap_connect($adServer) or die("Could not connect to {$adServer}");
$adServer
的值我正在从配置文件中获取。
当我传递空白值或任何其他随机值(如 "Hello")时,看起来 ldap_connect()
没有抛出错误。
我尝试给出以下代码来检查是否生成了任何错误消息。
echo ldap_error($ldap)
它总是说 'Success'。
因此我无法验证连接是否已建立到 LDAP 服务器并抛出相应的错误消息。
在什么情况下 'die' 会触发 ldap_connect()
函数。
如果配置文件中提供的服务器名称不起作用,我想向最终用户抛出适当的错误消息。
注意:PHP
我使用的是 5.6 版ldap_connect()
当它可以将提供的参数解析为 URL 时,总是 returns 资源。第一次实际使用该资源(因此建立连接并检测到可能的故障)是在使用 ldap_bind()
时。
作为 ldap_connect()
几乎总是 returns 一个资源句柄(如 http://php.net/ldap_connect 中所述)你的构造 die()
不会做你想做的事。只有当提供的参数不能在内部解析为 URL 时,它才会起作用。所以只要您提供一个 看起来 像服务器名或 URL 的字符串,一切正常。
我总是在失败后检查 ldap_bind()
究竟发生了什么,然后根据 返回的错误抛出异常。或者,我有时会在使用 ldap_bind()
之前进行检查,方法是使用 f.i fsockopen()
打开(并关闭)连接。如果无法打开该连接,则 ldap 连接也将不起作用。
所引用的 php 文档中的示例具有误导性,看来我们必须更改它们。因此,感谢您发现并提出问题!
顺便说一句:例如,调用 @ldap_connect('ldap:');
是 die()
可以工作的情况,因为它是一个不完整的 URL。或者使用带空格的字符串。
我找到了一种比使用模具更好的身份验证方法。 在 ldap connect 之后,我们将继续使用 ldap bind。如果绑定失败,那么我们可以检查 ldap 错误。
$ldap = @ldap_connect($adServer);
$bind = @ldap_bind ($ldap, $ldaprdn, $password);
if (!$bind) { // If Bind Failed then.
if (ldap_errno ($ldap) == 49 {
//Invalid Credentials
} else {
//LDAP Connection to LDAP Server Failed
}
}
有关所有 LDAP 错误编号的列表,您可以查看 here