接着 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);