<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'ldap.controls.php',
    1 => 'LDAP コントロール',
    2 => 'LDAP コントロール',
  ),
  'up' => 
  array (
    0 => 'book.ldap.php',
    1 => 'LDAP',
  ),
  'prev' => 
  array (
    0 => 'ldap.using.php',
    1 => 'PHP LDAP コールの使用法',
  ),
  'next' => 
  array (
    0 => 'ldap.examples.php',
    1 => '例',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    '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">LDAP コントロール</h1>

 <p class="para">
   コントロールは、リクエストを処理中にサーバーの振る舞いを変更するために
   LDAP リクエストと一緒に送られる特別なオブジェクトです。
   サーバーがレスポンスと一緒に送ってくる、
   追加の情報を提供するためのコントロールも存在します。
   これは通常、リクエストに付けて送られたコントロールオブジェクトへの返答になります。
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    全てのコントロールが、全てのLDAPサーバーによってサポートされているとは限りません。
    どのコントロールをサーバーがサポートしているのかを知るには、
    フィルタ (objectClass=*) を付けて空の dn を読むことで、
    root DSE に問い合わせる必要があります。
   </p>
   <div class="example" id="example-1">
    <p><strong>例1 ページ分けされた結果コントロールがサポートされているかをテストする</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// $ds is a valid link identifier for a directory server<br /><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">"This server does not support paged result control"</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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

 <p class="para">
   PHP 7.3 以降では、全てのリクエスト関数で <code class="parameter">controls</code> パラメータを使って
   コントロールを送信することができます。関数の拡張バージョンが存在する場合、
   完全なレスポンスオブジェクトを取得したい場合は、それを使うべきです。
   そうすれば、<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> は、送信するコントロールごとに配列を含めなければなりません。
   以下のキーが含まれます:
   <dl>
    
     <dt>
      oid
      (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>)
     </dt>
     <dd>
      <span class="simpara">
       コントロールの OID。
       LDAP_CONTROL_ から始まる定数を使うべきです。
       <a href="ldap.constants.php" class="link">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">
       コントロールを致命的なものとしてマークする場合、
       サーバーがそのコントロールをサポートしていない場合、
       またはサーバーが適用に失敗した場合、リクエストは失敗します。
       コントロールによっては、
       RFC で常に致命的だとマークされるべきだとされていることに注意してください。
       デフォルトは <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">
       コントロールの値。詳細は以下を参照ください。
      </span>
     </dd>
    
   </dl>

 </p>

 <p class="para">
   ほとんどのコントロールの値は、サーバーに BERエンコードして送られます。
   あなたは値を自分で BERエンコードするか、
   配列に正しいキーを渡すことでBERエンコードを行わせることができます。
   配列で渡すことをサポートしているコントロールは以下のとおりです:
  <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>
     期待されるキーは [size] と [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>
     期待されるキーは filter です。
    </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>
     期待されるキーは 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>
     期待されるキーは 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>
     期待されるキーは 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>
     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>
     期待されるキーは、before, after, attrvalue|(offset, count), [context] です。
    </p>
   </li>
  </ul>
 </p>

 <p class="para">
  次のコントロールには、値は必要ありません:
  <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">
   コントロール <strong><code><a href="ldap.constants.php#constant.ldap-control-proxy-authz">LDAP_CONTROL_PROXY_AUTHZ</a></code></strong> は特別です。
   なぜなら値のBERエンコードが不要だからです。よって、値を直接文字列として扱うことが出来ます。
 </p>

 <p class="para">
  <span class="function"><a href="function.ldap-parse-result.php" class="function">ldap_parse_result()</a></span> によってコントロールがパースされる場合、
  値はサポートされていれば配列に変換されます。
  サポートされているのは以下です:
  <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>
     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>
     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>
     dn と 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>
     dn と 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>
     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>
     target, count, errcode, context がキーになります。
    </p>
   </li>
  </ul>
 </p>
</div>
<?php manual_footer($setup); ?>