# ldap_search

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_search — Buscar el árbol LDAP

### Descripción

ldap_search(
resource `$link_identifier`,
string `$base_dn`,
string `$filter`,
array `$attributes` = array("*"),
int `$attrsonly` = 0,
int `$sizelimit` = -1,
int `$timelimit` = -1,
int `$deref` = LDAP_DEREF_NEVER,
array `$serverctrls` = array()
): resource

Realiza la búsqueda de un filtro específico sobre el directorio con el alcance de `LDAP_SCOPE_SUBTREE`. Esto es equivalente a buscar en el directorio completo.

Desde la versión 4.0.5 en adelante, también es posible hacer búsquedas paralelas. Para hacer esto se utiliza un array de identificadores de enlace, en lugar de un simple identificador, como el primer argumento. Si no quieres el mismo DN y el mismo filtro para todas las búsquedas, puedes utilizar también un array de DNs base y/o un array de filtros. Esos arrays deben ser del mismo tamaño como el de el array del identificador de enlace ya que, las primeras entradas de los arrays son utilizadas por una búsqueda, las segundas entradas son utilizadas para otra, y así. Cuando se hacen búsquedas en paralelo se devuelve un array de identificadores del resultado de la búsqueda, exceptuando en caso de error, la entrada que corresponde a la búsqueda será `false`. Esto es muy parecido a los valores que normalmente se devuelven, excepto que un identificador de resultado siempre es devuelto cuando se hace una búsqueda. Hay algunos casos raros donde el resultado normal de la búsqueda devuelve `false` mientras que la búsqueda paralela devuelve un identificador.

### Parámetros

`link_identifier`

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

`base_dn`

  El DN base para el directorio.

`filter`

  El filtro de búsqueda puede ser simple o avanzado, utilizando operadores booleanos en el formato descrito en la documentación de LDAP (ver el » Directorio del SDK Netscape o el » RFC4515 para la información completa sobre filtros).

`attributes`

  Un array de los atributos requeridos, por ejemplo, `array("mail", "sn", "cn")`. Nótese que el "dn" siempre es devuelto independientemente de qué tipos de atributos sean requeridos.

  Utilizando este parámetro es mucho más eficiente que la acción predeterminada (la cual es devolver todos los atributos y sus valores asociados). El uso de este parámetro debería ser considerado una buena práctica.

`attrsonly`

  Debería ser establecido a 1 si sólo se buscan tipos de atributos. Si se establece a 0 los valores de atributos y los tipos de atributos se muestran tal cual es el comportamiento predeterminado.

`sizelimit`

  Te permite limitar la cantidad de entradas a mostrar. Al establecer esto a 0 siginifica que no hay límite.

  > Nota:

  > Este parámetro NO puede prevalecer sobre el sizelimit preestablecido en el lado del servidor. Puede aún establecerlo a uno más bajo.

  > Algunos equipos de servidor de directorio serán configurados para devolver no mas que un número preestablecido de entradas. Si esto ocurre, el servidor indicará que sólo ha devuelto un conjunto de resultados parciales. Esto también ocurre si utiliza este parámetro para limitar el conteo de entradas devueltas.

`timelimit`

  Establece el número de segundos de cuánto tiempo pasa en la búsqueda. Poniendo esto a 0 siginifica que no hay límite.

  > Nota:

  > Este parámetro NO puede prevalecer sobre el timelimit preestablecido en el lado del servidor. Puede aún establecerlo a uno más bajo.

`deref`

  Especifica cuántos alias deberían ser manejados durante la búsqueda. Este puede ser uno de los siguientes:

  - `LDAP_DEREF_NEVER` - (predeterminado) Los alias nunca son dereferenciados.
  - `LDAP_DEREF_SEARCHING` - Los alias deberían ser dereferenciados durante la búsqueda pero no cuando se está ubicando el objeto base de la búsqueda.
  - `LDAP_DEREF_FINDING` - Los alias deberían ser dereferenciados cuando se está ubicando el objeto base pero no durante la búsqueda.
  - `LDAP_DEREF_ALWAYS` - Los alias siempre deberían ser dereferenciados.
`serverctrls`

  Array de Controles de LDAP a enviar con la petición.

### Valores devueltos

Devuelve un identificador de resultado de búsqueda, o `false` en caso de error.

### Historial de cambios

Versión | Descripción
--- | ---
7.3 | Se añadión soporte para `serverctrls`

### Ejemplos

En el ejemplo de abajo se devuelve la unidad organizacional, apellido, el nombre proporcionado y la dirección de correo electrónico para todas las personas en "My Company" donde el apellido o el nombre proporcionado contiene la subcadena $person. Este ejemplo utiliza un filtro booleano para decirle al servidor que busque información en más de un atributo.

Ejemplo #1 Búsqueda LDAP

`<?php
// $ds es un identificador de enlace válido para un servidor de directorio
// $person es todo o parte del nobre de una persona, por ejemplo "Jo"
$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array("ou", "sn", "givenname", "mail");
$sr=ldap_search($ds, $dn, $filter, $justthese);
$info = ldap_get_entries($ds, $sr);
echo $info["count"]." entradas devueltas\n";
?>`