接着 Jeremy S 的示例。
无需定义 LDAP_OPT_DIAGNOSTIC_MESSAGE 为 0x32 然后使用它,可以直接使用已定义为该值的选项 :)
LDAP_OPT_ERROR_STRING
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ldap_get_option — 获取给定选项的当前值
将value
设置为指定选项的值。
ldap
一个LDAP\Connection实例,由ldap_connect()返回。
option
参数option
可以是以下之一:
value
这将被设置为选项值。
版本 | 描述 |
---|---|
8.1.0 | ldap 参数现在期望一个LDAP\Connection实例;之前,期望一个有效的ldap link 资源。 |
示例 #1 检查协议版本
<?php
// $ds 是目录服务器的有效 LDAP\Connection 实例
if (ldap_get_option($ds, LDAP_OPT_PROTOCOL_VERSION, $version)) {
echo "使用协议版本 $version\n";
} else {
echo "无法确定协议版本\n";
}
?>
注释:
仅当使用 OpenLDAP 2.x.x 或 Netscape Directory SDK x.x 时,此函数才可用。
接着 Jeremy S 的示例。
无需定义 LDAP_OPT_DIAGNOSTIC_MESSAGE 为 0x32 然后使用它,可以直接使用已定义为该值的选项 :)
LDAP_OPT_ERROR_STRING
以下是判断 Active Directory 用户帐户是否过期的方法
define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($conn, $user, $pass);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);
if (!empty($extended_error))
{
$errno = explode(',', $extended_error)[2];
$errno = explode(' ', $errno)[2];
$errno = intval($errno);
if ($errno == 532)
$err = '无法登录:密码已过期。';
}
PHP 7.1 添加了直接配置 LDAP CA/Cert 环境的支持,而不是依赖于环境变量。我注意到很多人在尝试使其工作时遇到问题。
正确的方法是
$ds=ldap_connect("ldap.google.com");
ldap_set_option(NULL, LDAP_OPT_X_TLS_CERTFILE, "/path/file.crt");
ldap_set_option(NULL, LDAP_OPT_X_TLS_KEYFILE, "/path/file.key");
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_start_tls($ds);
...
ldap_close($ds);