特殊文字 (",", "+", """, "\", "<", ">", ";", "#", "=", space or a hexpair) を DN の属性や値に使用することもできます。 Net_LDAP2_Util::escape_dn_value()、 Net_LDAP2_Util::unescape_dn_value()、 Net_LDAP2_Util::ldap_explode_dn() そして Net_LDAP2_Util::canonical_dn() の API ドキュメントを参照ください。 これらの関数を用いると、DN を安全に処理することができます。
サーバに接続したら、Net_LDAP の search() メソッドでディレクトリを検索しましょう。 このメソッドのパラメータは次の三つです。
$base
は検索時に使用するベース DN です。
null
のままにしておくと、
接続時に指定したデフォルトのベース DN を使用します。
$filter
は、返される結果を指定するための問い合わせフィルタです。
文字列 (熟練者用) か、あるいは Net_LDAP_Filter
オブジェクトで指定します。オブジェクトで指定することをお勧めします。
Net_LDAP_Filter は、LDAP
のフィルタに適したエスケープを自動的に行います。
LDAP フィルタについては、別途
LDAP フィルタ
で説明します。
$params
は、現在のクエリで使用する設定項目の配列となります。
名前 | 説明 | デフォルト |
---|---|---|
scope |
検索で使用するスコープ
|
sub |
sizelimit |
結果として返すエントリの最大数 | 0 (無制限) |
timelimit |
検索時の最大の待ち時間 | 0 (無制限) |
attrsonly |
true の場合は属性名のみを返す |
false |
attributes |
そのエントリが含んでいる属性名の配列。 必要な属性のみに絞り込むことをお勧めします。 | array() (すべての属性) |
search() メソッドは、Net_LDAP_Search オブジェクトあるいは Net_LDAP_Error のいずれかを返します。 Net_LDAP_Search オブジェクトを使用すると、 エントリの件数の取得やエントリの内容の取得などの操作を行うことができます。
検索クエリの作成
<?php
// 非常に簡単なフィルタを作成します。
// ここでは、姓が "Joe" ではじまるエントリをすべて取得します
$filter = Net_LDAP_Filter::create('sn', 'begins', 'Joe');
// 独自の検索ベースを指定します。NULL を渡すと、Net_LDAP の設定で
// 指定した値を使用します。これはおそらくご希望のものとは異なるでしょう。
$searchbase = 'ou=addressbook,dc=example,dc=org';
// その他のオプション。
// 'ou=addressbook,dc=example,dc=org' 配下のすべてのツリーを検索し、
// 属性 'sn' のみを取得します。あとで実際に使用する属性のみを
// 取得するようにしておくことをお勧めします。
// しかし、不要な属性も含めて取得するほうが、
// 属性を取得するためだけに配列を再度読み込むよりも高速です。
$options = array(
'scope' => 'sub',
'attributes' => array('sn')
);
// さぁ、検索です!
$search = $ldap->search($searchbase, $filter, $options);
// エラーが出ていないかどうかを確かめます。
if (PEAR::isError($search)) {
die($search->getMessage() . "\n");
}
// 何件見つかったのかを表示します。
echo "全部で " . $search->count() . " 件のエントリが見つかりました!";
?>