LDAP ツリーを探索する

# ldap_search

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

ldap_search — LDAP ツリーを探索する

### 説明

function ldap_search(
LDAP\Connection|array `$ldap`,
array|string `$base`,
array|string `$filter`,
array `$attributes` = [],
int `$attributes_only` = 0,
int `$sizelimit` = -1,
int `$timelimit` = -1,
int `$deref` = `LDAP_DEREF_NEVER`,
?array `$controls` = `null`
): LDAP\Result|array|false

指定したフィルタを使用し、 スコープ `LDAP_SCOPE_SUBTREE` でディレクトリを検索します。これは、ディレクトリ全体を検索するのと同じ意味です。

並列検索も可能です。並列検索を行うには、単一の LDAP\Connection のインスタンスではなく、それの配列を使用します。同じベース DN を使用したくない場合や全ての検索について同じフィルタを使用したくない場合、ベース DN の配列またはフィルタの配列を使用することが可能です。これらの配列は、LDAP\Connection の配列と同じ大きさである必要があります。これは、その配列の最初が一回の検索で使用され、2 番目のエントリが他の検索で使用されるといったようになるからです。並列検索を実行する際、エラーの場合を除き、LDAP\Result の配列が返されます。エラーの場合は、返される値は `false` になります。

### パラメータ

`ldap`

  ldap_connect() が返す LDAP\Connection クラスのインスタンス。

`base`

  ディレクトリのベース DN。

`filter`

  検索フィルタは、LDAP ドキュメントに記述されたフォーマットの論理 演算子を用いて、簡単なものまたは高度なものとすることができます (フィルタに関する詳細な情報については、 » Netscape Directory SDK あるいは » RFC4515 を参照ください)。

`attributes`

  必要な属性を、 `array("mail", "sn", "cn")` のような通常の PHP 文字列配列で保持します。 "dn" は要求された属性の型によらず常に返されることに注意してください。

  このパラメータを使用すると、デフォルトの動作よりもかなり効率的になります (デフォルトでは、すべての属性とその値を返します)。 したがって、これを使用することを推奨します。

`attributes_only`

  属性の型のみを取得したい場合は 1 を設定します。 属性の型および値の両方を取得したい場合は 0 を設定します (これがデフォルトの挙動です)。

`sizelimit`

  取得するエントリ数の制限を設定します。 0 は無制限であることを表します。

  > 注意:

  > このパラメータは、サーバー側で事前に設定されている sizelimit を上書きすることはできません。それ以下の値を指定することはできます。

  > ディレクトリサーバーのホストによっては、 事前に設定された数以上のエントリを返さないようになっているものもあります。 この場合、サーバーでは、それが結果セットのすべてではないことを通知します。 このパラメータでエントリ数を制限した場合にも、同じことが起こります。

`timelimit`

  検索に要する最大秒数を設定します。 これを 0 にすると無制限であることを表します。

  > 注意:

  > このパラメータは、サーバー側で事前に設定されている timelimit を上書きすることはできません。それ以下の値を指定することはできます。

`deref`

  検索時のエイリアスの扱いについて指定します。 以下のいずれかとなります。

  - `LDAP_DEREF_NEVER` - (デフォルト) エイリアスは参照されません。
  - `LDAP_DEREF_SEARCHING` - エイリアスを参照しますが、検索のベースオブジェクト上にいるときは参照しません。
  - `LDAP_DEREF_FINDING` - エイリアスの参照は、ベースオブジェクト上にいて検索中でない場合に行われます。
  - `LDAP_DEREF_ALWAYS` - エイリアスを常に参照します。
`controls`

  リクエストと一緒に送信する LDAP コントロール の配列

### 戻り値

LDAP\Result のインスタンスか、LDAP\Result のインスタンスの配列を返します。失敗した場合に `false` を返します

### 変更履歴

バージョン | 説明
--- | ---
8.1.0 | 引数 `ldap` は、LDAP\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な `ldap link` resource を期待していました。
8.1.0 | LDAP\Result クラスのインスタンスを返すようになりました。 これより前のバージョンでは、resource を返していました。
8.0.0 | `controls` は、nullable になりました。 これより前のバージョンでは、デフォルト値が `[]` でした。
7.3.0 | `controls` のサポートが追加されました。

### 例

以下の例は、"My Company" の全員について姓または名の一部に文字列 $person を含む人の組織単位、姓、名、電子メールアドレスを取得します。 この例は、複数の属性に関する情報についてサーバーに検索をかける論理 フィルタを使用します。

例1 LDAP 検索

    <?php
    // $ds は、ディレクトリサーバーの LDAP\Connection のインスタンス

    // $person は、人名またはその一部。例 "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"]." 個のエントリが返されました\n";
    ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open