PHP Unconference Europe 2015

ldap_set_option

(PHP 4 >= 4.0.4, PHP 5)

ldap_set_optionEstablecer el valor de la opción proporcionada

Descripción

bool ldap_set_option ( resource $link_identifier , int $option , mixed $newval )

Establece el valor de la opción especificada a newval.

Parámetros

link_identifier

Un identificador de enlace de LDAP, devuelto por ldap_connect().

option

El parámetro option puede ser uno de estos:

Option Type Available since
LDAP_OPT_DEREF integer  
LDAP_OPT_SIZELIMIT integer  
LDAP_OPT_TIMELIMIT integer  
LDAP_OPT_NETWORK_TIMEOUT integer PHP 5.3.0
LDAP_OPT_PROTOCOL_VERSION integer  
LDAP_OPT_ERROR_NUMBER integer  
LDAP_OPT_REFERRALS bool  
LDAP_OPT_RESTART bool  
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_SERVER_CONTROLS y LDAP_OPT_CLIENT_CONTROLS requieren una lista de controles, lo que significa que el valor debe ser un array de controles. Un control consiste en un oid identificando el control, un value opcional, y un indicador opcional representado por criticality. En PHP un control es proporcionado por un array que contiene un elemento con la clave oid, una cadena de valor, y dos elementos opcionales. Los elementos opcionales son la clave value con un valor de tipo cadena, y la clave iscritical con un valor de tipo booleano. El valor de la clave iscritical de forma predeterminada es FALSE si no es provisto. Vea » draft-ietf-ldapext-ldap-c-api-xx.txt para más detalles. Vea también el segundo ejemplo a continuación.

newval

El nuevo valor para el option especificado.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Establecer la versión del protocolo

<?php
// $ds es un identificador de enlace válido para un servidor de directorio
if (ldap_set_option($dsLDAP_OPT_PROTOCOL_VERSION3)) {
    echo 
"Utilizando LDAPv3";
} else {
    echo 
"Falló al establcer la versión 3 del protocolo";
}
?>

Ejemplo #2 Establecer controles del servidor

<?php
// $ds es un identificador de enlace válido para un servidor de directorio
// control sin valor
$ctrl1 = array("oid" => "1.2.752.58.10.1""iscritical" => true);
// iscritical de forma predeterminada está en FALSE
$ctrl2 = array("oid" => "1.2.752.58.1.10""value" => "magic");
// intentar establecer ambos controles
if (!ldap_set_option($dsLDAP_OPT_SERVER_CONTROLS, array($ctrl1$ctrl2))) {
    echo 
"Falló al establecer los controles del servidor";
}
?>

Notas

Nota:

Esta función está disponible solamente cuando se utiliza OpenLDAP 2.x.x ó Netscape Directory SDK x.x.

Ver también

add a note add a note

User Contributed Notes 7 notes

up
1
hansfn at gmail dot com
8 years ago
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...
up
1
soulbros at yahoo dot com
12 years ago
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
up
0
badbo_5834 at hotmail dot com
10 months ago
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);
up
0
technosophos
7 years ago
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.
up
0
minusf at gmail dot com
8 years ago
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;
?>
up
0
john dot hallam at compaq dot com
12 years ago
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);
To Top