<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.ldap.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'ldap.controls.php',
    1 => 'Control LDAP',
    2 => 'Control LDAP',
  ),
  'up' => 
  array (
    0 => 'book.ldap.php',
    1 => 'LDAP',
  ),
  'prev' => 
  array (
    0 => 'ldap.using.php',
    1 => 'Utilizaci&oacute;n de las funciones LDAP de PHP',
  ),
  'next' => 
  array (
    0 => 'ldap.examples.php',
    1 => 'Ejemplos',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/ldap/controls.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="ldap.controls" class="chapter">
 <h1 class="title">Control LDAP</h1>

 <p class="para">
   Los controles son objetos especiales que pueden ser enviados
   con una petición LDAP para modificar el comportamiento del servidor LDAP
   durante la ejecución de la petición. También pueden existir
   controles enviados por el servidor con la respuesta para proporcionar
   más información, generalmente para responder a un objeto de control
   de la petición.
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    No todos los controles son soportados por todos los servidores LDAP. Para saber
    qué controles son soportados por un servidor, debe interrogarse el DSE
    raíz leyendo un dn vacío con el filtro (objectClass=*).
   </p>
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Prueba de soporte para el control de resultados paginados</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// $ds es un identificador de enlace válido para un servidor de directorio<br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">ldap_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$ds</span><span style="color: #007700">, </span><span style="color: #DD0000">''</span><span style="color: #007700">, </span><span style="color: #DD0000">'(objectClass=*)'</span><span style="color: #007700">, [</span><span style="color: #DD0000">'supportedControl'</span><span style="color: #007700">]);<br />if (!</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">LDAP_CONTROL_PAGEDRESULTS</span><span style="color: #007700">, </span><span style="color: #0000BB">ldap_get_entries</span><span style="color: #007700">(</span><span style="color: #0000BB">$ds</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">)[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'supportedcontrol'</span><span style="color: #007700">])) {<br />  die(</span><span style="color: #DD0000">"Este servidor no soporta el control de resultados paginados"</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p></blockquote>
 </p>

 <p class="para">
   Desde PHP 7.3, puede enviarse controles con la petición en todas
   las funciones de petición utilizando el parámetro <code class="parameter">controls</code>. Cuando existe
   una versión extendida de una función, debe utilizarse si se desea
   acceder al objeto de respuesta completo y ser capaz de analizar
   los controles de respuesta a partir de este utilizando <span class="function"><a href="function.ldap-parse-result.php" class="function">ldap_parse_result()</a></span>.
 </p>

 <p class="para">
   <code class="parameter">controls</code> debe ser un array que contenga un array para cada control a enviar,
   conteniendo las siguientes claves :
   <dl>
    
     <dt>
      oid
      (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>)
     </dt>
     <dd>
      <span class="simpara">
       El OID del control. Deben utilizarse las constantes que comienzan por
       LDAP_CONTROL_ para esto. Ver <a href="ldap.constants.php" class="link">constantes de LDAP</a>.
      </span>
     </dd>
    
    
     <dt>
      iscritical
      (<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>)
     </dt>
     <dd>
      <span class="simpara">
       Si un control está marcado como crítico, la petición fallará si el
       control no es soportado por el servidor, o si falla al ser
       aplicado. Tenga en cuenta que algunos controles deben siempre estar marcados
       como críticos como se indica en el RFC que los introduce. Por omisión a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </span>
     </dd>
    
    
     <dt>
      value
      (<span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span>)
     </dt>
     <dd>
      <span class="simpara">
       Si es aplicable, el valor del control. Lea a continuación para más información.
      </span>
     </dd>
    
   </dl>

 </p>

 <p class="para">
   La mayoría de los valores de control son enviados al servidor en BER-encodados.
   Puede BER-encodar el valor usted mismo, o puede pasar un array con las claves correctas
   para que el encodado sea realizado por usted.
   Los controles soportados para pasar como array son :
  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-pagedresults">LDAP_CONTROL_PAGEDRESULTS</a></code></strong>
     Las claves esperadas son [size] y [cookie]
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-assert">LDAP_CONTROL_ASSERT</a></code></strong>
     La clave esperada es [assertion]
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-valuesreturnfilter">LDAP_CONTROL_VALUESRETURNFILTER</a></code></strong>
     La clave esperada es filter
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-pre-read">LDAP_CONTROL_PRE_READ</a></code></strong>
     La clave esperada es attrs
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-post-read">LDAP_CONTROL_POST_READ</a></code></strong>
     La clave esperada es attrs
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-sortrequest">LDAP_CONTROL_SORTREQUEST</a></code></strong>
     Espera un array de arrays con las claves attr, [oid], [reverse].
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-vlvrequest">LDAP_CONTROL_VLVREQUEST</a></code></strong>
     Las claves esperadas son before, after, attrvalue|(offset, count), [context]
    </p>
   </li>
  </ul>
 </p>

 <p class="para">
   Los siguientes controles no requieren valor :
  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-passwordpolicyrequest">LDAP_CONTROL_PASSWORDPOLICYREQUEST</a></code></strong>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-managedsait">LDAP_CONTROL_MANAGEDSAIT</a></code></strong>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-dontusecopy">LDAP_CONTROL_DONTUSECOPY</a></code></strong>
    </p>
   </li>
  </ul>
 </p>

 <p class="para">
   El control <strong><code><a href="ldap.constants.php#constant.ldap-control-proxy-authz">LDAP_CONTROL_PROXY_AUTHZ</a></code></strong> es un caso especial
   ya que su valor no se espera que esté BER-encodado, por lo que puede
   utilizarse directamente una cadena para su valor.
 </p>

 <p class="para">
   Cuando los controles son analizados por <span class="function"><a href="function.ldap-parse-result.php" class="function">ldap_parse_result()</a></span>, los valores son
   transformados en array si son soportados.
   Esto es soportado para :
  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-passwordpolicyresponse">LDAP_CONTROL_PASSWORDPOLICYRESPONSE</a></code></strong>
     Las claves son expire, grace, [error]
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-pagedresults">LDAP_CONTROL_PAGEDRESULTS</a></code></strong>
     Las claves son size, cookie
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-pre-read">LDAP_CONTROL_PRE_READ</a></code></strong>
     Las claves son dn y los nombres de atributos LDAP
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-post-read">LDAP_CONTROL_POST_READ</a></code></strong>
     Las claves son dn y los nombres de atributos LDAP
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-sortresponse">LDAP_CONTROL_SORTRESPONSE</a></code></strong>
     Las claves son errcode, [attribute]
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="ldap.constants.php#constant.ldap-control-vlvresponse">LDAP_CONTROL_VLVRESPONSE</a></code></strong>
     Las claves son target, count, errcode, context
    </p>
   </li>
  </ul>
 </p>
</div>
<?php manual_footer($setup); ?>