ldap_search

(PHP 3, PHP 4, PHP 5)

ldap_search -- LDAP ツリーを探索する

説明

resource ldap_search ( resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] )

サーチ結果 ID を返します。エラーの場合に FALSE を返します。

ldap_search() は、 LDAP_SCOPE_SUBTREE のスコープを有するディレクトリに関して、 指定されたフィルタにより検索を行います。 これは、ディレクトリ全体を探索することと等価です。 base_dn はディレクトリのベース DN を指定します。

サーバーから返される属性と値を必要なものだけに制限するために オプションの 4 番目のバラメータを指定することができます。 これは、(全ての属性と関連する値を返す)デフォルトの動作よりも かなり効率的です。 このため、4 番目のパラメータを使用することが望ましいです。

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

いくつかのディレクトリサーバホストは、事前に設定されたエントリ数 以上のものを返します。この場合、サーバは部分的な結果集合を返した だけであることをサーバは示します。この場合、取得するエントリ数を 制限するために 6 番目のパラメータ sizelimit も使用します。

属性型のみを取得したい場合、5 番目のパラメータ attrsonly を1とする必要があります。0 に設定 した場合、属性型と属性値がデフォルトの動作として取得されます。

6 番目のパラメータ sizelimit が指定された場合 取得するエントリ数を制限することが可能です。これに 0 を指定すると 制限を設けないこととなります。 注意: このパラメータはサーバ側で事前に設定された sizelimit を 上書きすることはできません。

7 番目のパラメータ timelimit は、検索に要する 最大時間を設定します。これを 0 にすると制限を設けないこととなります。 注意: このパラメータはサーバ側で事前に設定された timelimit を上書き することはできません。これより小さい値を設定することも可能です。

8 番目のパラメータ deref は、検索時にエイリアスを どのように処理するかを指定します。以下のいずれかを指定します。

注意: これらのオプションのパラメータは 4.0.2 で追加されました。 attrsonlysizelimittimelimitderef

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

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

例 1. LDAP 検索

<?php
// $ds は、ディレクトリサーバの有効なリンク ID

// $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";
?>

4.0.5 以降、並行検索も可能となっています。並行検索を行うには、単一の ID を使うのではなく、リンク ID の配列を使用します。 同じベース DN を使用したくない場合や全ての検索について同じフィルタを 使用したくない場合、ベース DN の配列またはフィルタの配列を使用する ことが可能です。これらの配列は、リンク ID の配列と同じ大きさである 必要があります。これは、その配列の最初が一回の検索で使用され、2 番目の エントリが他の検索で使用されるといったようになるからです。並行検索を 実行する際、エラーの場合を除き、検索結果 ID の配列が返されます。 エラーの場合は対応する検索のエントリは FALSE となります。これは 通常返される値とよく似ていますが、検索が行われた際に結果 ID が常に 返されます。まれに、並行検索は ID を返すにもかかわらず通常の検索は FALSE を返すということがあります。