Following on from Jeremy S's example.
Instead of defining LDAP_OPT_DIAGNOSTIC_MESSAGE as 0x32 then using it, you can just use the option already defined as that value :)
LDAP_OPT_ERROR_STRING
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ldap_get_option — 指定したオプションの現在の値を得る
value
を、指定したオプションの値として設定します。
ldap
ldap_connect() が返す LDAP\Connection クラスのインスタンス。
option
パラメータ option
は以下のいずれかとなります。
オプション | 型 | 利用可能になったバージョン |
---|---|---|
LDAP_OPT_DEREF |
int | |
LDAP_OPT_SIZELIMIT |
int | |
LDAP_OPT_TIMELIMIT |
int | |
LDAP_OPT_NETWORK_TIMEOUT |
int | |
LDAP_OPT_PROTOCOL_VERSION |
int | |
LDAP_OPT_ERROR_NUMBER |
int | |
LDAP_OPT_DIAGNOSTIC_MESSAGE |
string | |
LDAP_OPT_REFERRALS |
int | |
LDAP_OPT_RESTART |
int | |
LDAP_OPT_HOST_NAME |
string | |
LDAP_OPT_ERROR_STRING |
string | |
LDAP_OPT_MATCHED_DN |
string | |
LDAP_OPT_SERVER_CONTROLS |
array | |
LDAP_OPT_CLIENT_CONTROLS |
array | |
LDAP_OPT_X_KEEPALIVE_IDLE |
int | 7.1 |
LDAP_OPT_X_KEEPALIVE_PROBES |
int | 7.1 |
LDAP_OPT_X_KEEPALIVE_INTERVAL |
int | 7.1 |
LDAP_OPT_X_TLS_CACERTDIR |
string | 7.1 |
LDAP_OPT_X_TLS_CACERTFILE |
string | 7.1 |
LDAP_OPT_X_TLS_CERTFILE |
string | 7.1 |
LDAP_OPT_X_TLS_CIPHER_SUITE |
string | 7.1 |
LDAP_OPT_X_TLS_CRLCHECK |
int | 7.1 |
LDAP_OPT_X_TLS_CRL_NONE |
int | 7.1 |
LDAP_OPT_X_TLS_CRL_PEER |
int | 7.1 |
LDAP_OPT_X_TLS_CRL_ALL |
int | 7.1 |
LDAP_OPT_X_TLS_CRLFILE |
string | 7.1 |
LDAP_OPT_X_TLS_DHFILE |
string | 7.1 |
LDAP_OPT_X_TLS_KEYFILE |
string | 7.1 |
LDAP_OPT_X_TLS_PACKAGE |
string | 7.1 |
LDAP_OPT_X_TLS_PROTOCOL_MIN |
int | 7.1 |
LDAP_OPT_X_TLS_RANDOM_FILE |
string | 7.1 |
LDAP_OPT_X_TLS_REQUIRE_CERT |
int |
value
これが、オプションの値として設定されます。
成功した場合に true
を、失敗した場合に false
を返します。
バージョン | 説明 |
---|---|
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 を使用した場合にのみ利用可能です。
Following on from Jeremy S's example.
Instead of defining LDAP_OPT_DIAGNOSTIC_MESSAGE as 0x32 then using it, you can just use the option already defined as that value :)
LDAP_OPT_ERROR_STRING
Here is how to tell if an Active Directory user account expired:
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 = 'Unable to login: Password expired.';
}
PHP 7.1 added support for configuring the LDAP CA/Cert environment directly, rather than relying on the environment variables. I noticed that a lot of people are having trouble getting this to work.
The correct way is:
$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);