Hugh's Blog

PHP LDAP 连接超时

最近在使用 PHP 连接 LDAP 服务器做用户验证,在测试域控服务器的时候,设置了超时选项,如果超时则表示无法连接服务器,一般来说,有如下的代码:

$conn = @ldap_connect('ldap://1.1.1.1:389');
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);
ldap_set_option($conn, LDAP_OPT_NETWORK_TIMEOUT, 2);
ldap_set_option($conn, LDAP_OPT_TIMELIMIT, 2);
$bind = @ldap_bind($conn, '[email protected]', '123456');

其中 LDAP_OPT_NETWORK_TIMEOUTLDAP_OPT_TIMELIMIT 的单位是秒,超时了便返回 false。

但是上面的两个选项是针对服务器不能连接的情况,如果已经连接了服务器,但是服务器并没有响应,此时连接就会挂起一直到默认的超时时间,这个时间很长。

翻看了 ldap_set_option 的文档也没看到有其他的超时选项,直到翻到这个评论才看到有人找到了隐藏的选项 LDAP_OPT_TIMEOUT,这个选项刚好解决了遇到的问题,不知道为什么没有把这个选项加到文档,最后加上代码:

ldap_set_option($conn, LDAP_OPT_TIMEOUT, 2);