Php 我能否以编程方式确定ldap_绑定是否因网络问题而失败?

Php 我能否以编程方式确定ldap_绑定是否因网络问题而失败?,php,ldap,Php,Ldap,我们使用LDAP服务器对用户进行身份验证。因为服务器是远程访问的,所以我们的Web服务器很有可能是在线的,而LDAP服务器将停机进行维护 现在,当ldap_绑定失败时,我假设这是一个用户身份验证问题(错误的用户名/密码),我会向用户显示一条消息。但是,如果与LDAP服务器的连接出现故障(这不一定是凭据问题),那么最终会有数百名用户告诉我他们的密码不起作用,而这不是问题所在 我怎样才能从中恢复过来?ldap_connect似乎在所有情况下都会成功,因为连接会延迟到调用ldap_bind为止。lda

我们使用LDAP服务器对用户进行身份验证。因为服务器是远程访问的,所以我们的Web服务器很有可能是在线的,而LDAP服务器将停机进行维护

现在,当ldap_绑定失败时,我假设这是一个用户身份验证问题(错误的用户名/密码),我会向用户显示一条消息。但是,如果与LDAP服务器的连接出现故障(这不一定是凭据问题),那么最终会有数百名用户告诉我他们的密码不起作用,而这不是问题所在

我怎样才能从中恢复过来?ldap_connect似乎在所有情况下都会成功,因为连接会延迟到调用ldap_bind为止。ldap_bind的返回值是一个简单的布尔值,虽然PHP显示的警告消息是信息性的,但这对我的代码没有太大帮助。

使用
ldap_errno()

可能的错误代码列表:

请求/响应框架 LDAP交互由请求和响应组成。响应将始终包含一个结果 代码。当请求是绑定时,非零结果代码表示出现错误,例如 例如,结果代码decimal
49
表示提供的凭据不正确(在 在某些情况下,出于安全原因,当条目不存在时,可以返回此结果代码 以误导攻击者)。应用程序编码人员应验证与 服务器可以成功,并且绑定可分辨名称具有正确的凭据 使用已知的正确工具(如
ldapsearch
)进行身份验证。例如,尝试:

ldapsearch -h hostname -p port \
   -D distinguished-name-here -w <password> -b '' -s base '(&)' 
ldapsearch-h主机名-p端口\
-D此处的可分辨名称-w-b'-s基'(&)'
上述搜索建立连接,将连接的授权状态更改为 使用给定凭据指定的身份验证ID,然后从根目录检索属性 DSE。如果此搜索成功,则可以向应用程序编码人员保证 凭据是正确的

网络超时 应用程序编码人员应始终使用支持网络超时概念的API 由于超时不是LDAP协议的一部分,因此对搜索有时间限制(请参阅 ),但协议中没有网络超时。 如果LDAP API不支持网络超时,则不应考虑使用该API 非平凡的LDAP客户端工作

另见

如果需要,我会发布示例代码,但我暗自怀疑,有某种标准方法可以检查产生的错误,而我只是不知道/