接續 Jeremy S 的範例。
您可以直接使用已定義為該值 (0x32) 的選項,而不需將 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 的範例。
您可以直接使用已定義為該值 (0x32) 的選項,而不需將 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/憑證環境的功能,而不是依賴環境變數。我注意到很多人在使用這項功能時遇到問題。
正確的做法是
$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);