PHP ldap_connect到多个主机,以防一个无法访问

时间:2015-10-27 15:42:12

标签: php active-directory ldap

一位同事建议我们使用多个主机进行身份验证的网站 基于LDAP,以防一个主机当前关闭。现在我知道你可以做类似

的事情了
$LDAP_SERVERS = "10.101.01.1 10.100.10.2";
$ldap = ldap_connect($LDAP_SERVERS);

但我正在使用配置文件:

return [
    'domain_controller' => ['10.101.01.1', '10.100.10.2'],
    'base_dn'           => 'OU=foo,DC=example,DC=local',
    'ssl'               => false,
    ...
];

我的连接是通过

完成的
$protocol = $this->ssl ? $this::PROTOCOL_SSL : $this::PROTOCOL;
$port     = $this->ssl ? $this::PORT_SSL : $this::PORT;

return $this->connection = ldap_connect($protocol . $hostname, $port);

由于同事建议将来我们的LDAP主机可能会通过SSL运行,我怎样才能让这多个主机为此工作呢?在它上面只使用主机名,但这是因为它是非基于ssl的。鉴于SSL,您需要 ldaps:// 协议和端口号,对吧? 因此它不适用于主机名,我不确定你是否可以做一些简单的连接看起来像 ldap_connect('ldaps://' . '10.101.01.1 10.100.10.2', 123);
(假设两个服务器为基于ssl的ldap运行相同的端口)

编辑:使用ldap_connect('ldaps://hostnameone ldaps://hostnametwo, 636');让它工作正如reddit用户所说:“注意它们仍然用空格分隔,应该按照出现的顺序进行尝试。

2 个答案:

答案 0 :(得分:2)

你应该可以这样做:

ldap_connect("ldaps://example.com:389 ldap://example.com:389")

但要注意:这将启动连接(在调用ldap_connect)尝试第一台服务器,超时后 尝试下一台服务器等等。这可能会造成不必要的延迟!

答案 1 :(得分:-1)

如果无法建立连接,则PHPs ldap_connect()将返回false 更多关于ldap_connect()

尝试这样的事情:

if(!$ldap_conn = ldap_connect($adhost1)) {
    if(!$ldap_conn = ldap_connect($adhost2)) {
        die('Unable to establish LDAP connection.');
    }
}