(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
ldap_set_option — Устанавливает значение опции
$ldap, int $option, array |string |int |bool $value): bool
Функция устанавливает для опции значение value.
ldap
Параметр принимает либо экземпляр класса LDAP\Connection , который возвращает функция ldap_connect() ,
и устанавливает значение опции для этого соединения, либо значение null для установки глобального значения опции.
option
Параметр option принимает константу из следующего списка:
Опции LDAP_OPT_SERVER_CONTROLS и LDAP_OPT_CLIENT_CONTROLS
требуют список элементов управления, поэтому значение передают как массив элементов управления.
Элемент управления состоит из записи с ключом oid, значение которого определяет элемент управления,
необязательного поля value, и дополнительного флага в записи с ключом criticality.
В PHP элемент управления задаётся массивом, который содержит элемент массива с ключом oid
со строковым значением, и двумя необязательными элементами массива.
Необязательные элементы — ключ value со строковым значением
и ключ iscritical с логическим значением.
Для элемента с ключом iscritical по умолчанию устанавливается значение false ,
если не указали другое значение.
Подробнее API протокола LDAP описывает документ » draft-ietf-ldapext-ldap-c-api-xx.txt.
Смотрите также второй пример на этой странице.
Замечание:
TLS-параметры учитываются LDAPS-подключением, которое создаёт функция ldap_connect() , или TLS-подключением, которое устанавливает функция ldap_start_tls() , только если параметры установили глобально и до инициализации соединения.
value
Новое значение опции option.
Функция возвращает true , если выполнилась успешно, или false , если возникла ошибка.
| Версия | Описание |
|---|---|
| 8.1.0 |
Параметр ldap теперь принимает объект LDAP\Connection ;
раньше параметр ждал ресурс (resource ) ldap link .
|
Пример #1 Пример установки версии протокола
<?php
// Переменная $ds — допустимый для сервера каталогов экземпляр класса LDAP\Connection
if (ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
echo "Функция установила в объекте подключения 3-ю версию протокола — LDAPv3";
} else {
echo "Сбой установки 3-й версии протокола";
}
?>Пример #2 Пример установки серверных элементов управления
<?php
// Переменная $ds — допустимый для сервера каталогов экземпляр класса LDAP\Connection.
// Элемент управления без элемента с ключом value
$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.
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 SouliosIf 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..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...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);I have the following code, but you do not rename the cn, that may be?
$TheDN = "cn=Nombre,ou=Addressbook,dc=axia-ldap,dc=net";
$newRDN = "cn=bill";
$newParent = "ou=Addressbook,dc=axia-ldap,dc=net";
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
$result = ldap_rename($ds, $TheDN, $newRDN, $newParent, TRUE);it seems that ldap_set_option returns 1 for bogus ldap_connect -ions also.
ldap_connect always returns a resource (documented in the
comments of ldap_connect) so it is not possible to check if the
ldap server is there or alive or what. and because ldap_set_option
must be between ldap_connect and ldap_bind, there seems to
be no sense in checking the return value.
it is a bit strange that ldap_bind is the first function which can
really check if a ldap resource is usable because it is the third
function in line to use when working with openldap.
<?php
$connect = ldap_connect("whatever");
$set = ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
echo $set;
?>To get this to work I had to set the LDAP version to 3 using ldap_set_option. Here is an example that might help:
$TheDN = "cn=john smith,ou=users,dc=acme,dc=com";
$newRDN = "cn=bill brown";
$newParent = "ou=users,dc=acme,dc=com";
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
@$result = ldap_rename($ds, $TheDN, $newRDN, $newParent, TRUE);