ldap_set_option
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ldap_set_option — 指定したオプションの値を設定する
説明
指定したオプションの値を value
に設定します。
パラメータ
ldap
-
特定の接続に対してオプションを設定する場合は、 ldap_connect() が返す、 LDAP\Connection クラスのインスタンス。 オプションをグローバルに設定する場合は、
null
を設定します。 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_REFERRALS
bool LDAP_OPT_RESTART
bool LDAP_OPT_HOST_NAME
string LDAP_OPT_ERROR_STRING
string LDAP_OPT_DIAGNOSTIC_MESSAGE
string LDAP_OPT_MATCHED_DN
string LDAP_OPT_SERVER_CONTROLS
array LDAP_OPT_CLIENT_CONTROLS
array LDAP_OPT_X_KEEPALIVE_IDLE
int PHP 7.1.0 LDAP_OPT_X_KEEPALIVE_PROBES
int PHP 7.1.0 LDAP_OPT_X_KEEPALIVE_INTERVAL
int PHP 7.1.0 LDAP_OPT_X_TLS_CACERTDIR
string PHP 7.1.0 LDAP_OPT_X_TLS_CACERTFILE
string PHP 7.1.0 LDAP_OPT_X_TLS_CERTFILE
string PHP 7.1.0 LDAP_OPT_X_TLS_CIPHER_SUITE
string PHP 7.1.0 LDAP_OPT_X_TLS_CRLCHECK
int PHP 7.1.0 LDAP_OPT_X_TLS_CRLFILE
string PHP 7.1.0 LDAP_OPT_X_TLS_DHFILE
string PHP 7.1.0 LDAP_OPT_X_TLS_KEYFILE
string PHP 7.1.0 LDAP_OPT_X_TLS_PROTOCOL_MIN
int PHP 7.1.0 LDAP_OPT_X_TLS_RANDOM_FILE
string PHP 7.1.0 LDAP_OPT_X_TLS_REQUIRE_CERT
int PHP 7.0.5 LDAP_OPT_SERVER_CONTROLS
およびLDAP_OPT_CLIENT_CONTROLS
はコントロールのリストが必要です。 つまり、値がコントロールの配列である必要があるということです。 コントロールは、そのコントロールの ID である oid、オプションの value、オプションのフラグ criticality からなります。PHP において、 コントロールはキーが oid で値が文字列、 二つのオプションの要素からなる配列で指定されます。オプションの要素は、 キーが value で値が文字列、そしてキーが iscritical で値が論理値となります。 iscritical を省略した場合のデフォルトはfalse
です。詳細は » draft-ietf-ldapext-ldap-c-api-xx.txt を参照ください。また以下の二番目の例も参照ください。 value
-
指定したオプション
option
の新しい値。
変更履歴
バージョン | 説明 |
---|---|
8.1.0 |
引数 ldap は、LDAP\Connection
クラスのインスタンスを期待するようになりました。
これより前のバージョンでは、有効な ldap link リソース を期待していました。
|
例
例1 プロトコルバージョンの設定
<?php
// $ds はディレクトリサーバーへの LDAP\Connection のインスタンス
if (ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
echo "LDAPv3 を使用します";
} else {
echo "プロトコルバージョンを 3 に設定できませんでした";
}
?>
例2 サーバーコントロールの設定
<?php
// $ds は値を持たないディレクトリサーバーコントロールへの LDAP\Connection のインスタンスです。
$ctrl1 = array("oid" => "1.2.752.58.10.1", "iscritical" => true);
// iscritical のデフォルトは、FALSE です。
$ctrl2 = array("oid" => "1.2.752.58.1.10", "value" => "magic");
// 両方のコントロールを試します
if (!ldap_set_option($ds, LDAP_OPT_SERVER_CONTROLS, array($ctrl1, $ctrl2))) {
echo "サーバーコントロールの設定に失敗しました。";
}
?>
注意
注意:
この関数は、OpenLDAP 2.x.x または Netscape Directory SDK x.x を使用している場合のみ利用可能です。
User Contributed Notes 8 notes
As john.hallam@compaq.com above mentioned ,one has to set option LDAP_OPT_PROTOCOL_VERSION=3
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
to use the ldap_rename function.
However, the ldap_set_option() line has to be written immediately after ldap_connect() and before ldap_bind() statements.
Christos Soulios
Luckily you can turn on debugging before you open a connection:
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
This way you at least can see in the logs if the connection fails...
If you want to disable the TLS cert check (e.g. because you are doing an SSH port-forward, and ldaps is pointing to localhost), then you must invoke:
ldap_set_option(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT,0)
*before* calling ldap_connect()
If you try:
$ds = ldap_connect(...)
ldap_set_option($ds, LDAP_OPT_X_TLS_REQUIRE_CERT,0)
then the option won't actually take effect, and the certificate will be checked anyway, and a TLS failure will happen..
The following flags are valid integer values for the LDAP_OPT_DEREF (as taken from the documentation for ldap_read()):
LDAP_DEREF_NEVER (int 0) - (default) aliases are never dereferenced.
LDAP_DEREF_SEARCHING (int 1) - aliases should be dereferenced during the search but not when locating the base object of the search.
LDAP_DEREF_FINDING (int 2) - aliases should be dereferenced when locating the base object but not during the search.
LDAP_DEREF_ALWAYS (int 3) - aliases should be dereferenced always.
Example:
<?php
ldap_set_option($ds, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS);
?>
These are defined in the draft C API (presumably from the original LDAP API). See draft-ietf-ldapext-ldap-c-api-xx.txt included in the OpenLDAP source code distribution.
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);