2

php.net マニュアルのこれらの 投稿によると、複数の DN を提供できるはずです。ldap_search()

ただし、以下の実装を機能させることはできません。

$dn[] = 'ou=Red,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Green,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Blue,ou=Teams,ou=Users,dc=example,dc=org';

$query = ldap_search($conn, $dn, $filter, $attrs);

個々の DN 文字列のいずれかを通過する場合はすべて問題ありませんが、配列を指定すると、「そのようなオブジェクトはありません」というメッセージでエラーが発生します。

これに対する明らかな回避策は、DN 配列をループして個別のクエリを起動し、すべてを 1 つの配列にプッシュすることです。1 つの DN (ページ付けされた - 例 2)に 8000 個以上のオブジェクトを戻し、他の 2 つのそれぞれに約 300個のオブジェクトを戻すため、これを行う必要はありません。

実際に複数の DN を検索することは可能ですか? おそらく、単一の DN 文字列内の特別な構文 (記号/文字)?

4

2 に答える 2

3

検索リクエストには、少なくとも次のパラメータが含まれている必要があります。

  • 検索を開始するベース オブジェクト (ベース オブジェクトより上のオブジェクトは返されません)
  • 検索の範囲:baseはベース オブジェクト自体、oneはベース オブジェクトとベース オブジェクトの 1 レベル下、subはベース オブジェクトとベース オブジェクトの下のすべてのエントリです。
  • 返されるエントリを、フィルタ内のアサーションに一致するエントリに制限するフィルタ

属性のリストを指定することもできますが、すべてではありませんが、多くの LDAP API は、検索要求で何も指定されていない場合、すべてのユーザー属性を要求します。

リストされているケースでは、ベース オブジェクトを に設定しou=users,dc=example,dc=com、適切なフィルターを使用します。LDAP クライアントが返されるエントリを , の下位にあるエントリに制限する必要があるou=red場合ou=green、または、データが を使用しない場合は、正しいオブジェクト クラスou=blueを使用するなどの複合拡張一致フィルタを使用できる可能性があります。すべての LDAP 準拠サーバーは拡張一致フィルターをサポートしていますが、非準拠サーバーはこの標準フィルターをサポートしていない場合があります。(&(objectClass=inetOrgPerson)(|(ou:dn:=red)(ou:dn:=green)(ou:dn:=blue)))inetOrgPerson

複数のベース オブジェクトを使用することはできません。このscopeパラメーターは、ベース オブジェクトの下で検査される下位レベル (ある場合) の数を定義します。

こちらもご覧ください

于 2012-05-09T12:57:24.357 に答える
2

マニュアルでこれを見ましたか?

配列の最初のエントリが 1 つの検索に使用され、2 番目のエントリが別の検索に使用されるため、これらの配列はリンク識別子配列と同じサイズでなければなりません。

基本的に、$conn変数は配列のサイズに等しい接続の配列である必要があります$dn

配列に3 つの要素がある場合、$dn配列には 3 つの要素が必要です$conn

$ds = ldap_connect($ldapserver);

$dn[] = 'ou=Red,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Green,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Blue,ou=Teams,ou=Users,dc=example,dc=org';

// Match connection elements to count of dn elements
for($x=0, $x < count($dn), $x++)
{
    $conn[] = $ds;
}

$query = ldap_search($conn, $dn, $filter, $attrs);
于 2012-05-09T12:51:02.117 に答える