エントリを取得するにはいくつかの方法があります。 直接取得するか search リクエストを実行するかのいずれかです。 エントリを直接取得したい場合は、その完全識別名 (DN) を知っている必要があります。 既知のエントリを直接ディレクトリサーバから取得するには、 Net_LDAP の getEntry() メソッドを使用します。このメソッドのパラメータは、 エントリの DN とエントリから読み込みたい属性のふたつです。 返り値は、取得に成功した場合は Net_LDAP_Entry オブジェクト、 失敗した場合は Net_LDAP_Error オブジェクトとなります。
取得の前に、そのエントリが実際に存在するかどうかを調べたいこともあるでしょう。 その場合は Net_LDAP の dnExists() を使用します。このメソッドは、DN を受け取って true あるいは false を返します。
エントリを直接取得する
<?php
// 取得したい DN を定義します
// givenname と surname を取得します
$dn = 'cn=admin,o=example,dc=org';
$entry = $ldap->getEntry($dn, array('gn', 'sn'));
// エラーチェックが重要です!
if (Net_LDAP::isError($entry)) {
die('エントリの取得に失敗しました: '.$entry->getMessage());
}
?>
もうひとつの方法としては、検索結果からエントリを取得するというものがあります。 "検索" のところで説明したように、検索結果のエントリにアクセスするには Net_LDAP_Search オブジェクトを使用します。 このオブジェクトは Net_LDAP の search() メソッドで取得することができます。以下にあげる各メソッドは、 何か問題が発生した場合に Net_LDAP_Error オブジェクトを返します。エラーチェックを忘れないでください! エントリを読み込む方法を以下に列挙します。
Net_LDAP_Search のメソッド | 説明 |
---|---|
entries() | これは、エントリの内容を並べ替えずにすぐに返します。 |
as_struct() | これは、全エントリを Net_LDAP_Entry オブジェクトではなく多次元配列で返します。 最初のレベルの配列のキーは DN で、その値として全属性を含む配列が設定されます。 次のレベルの配列のキーは属性名で、 その値として属性のすべての値を含む配列が設定されます。 値がひとつだけだったり値がない場合でも、配列となることに注意しましょう。 |
sorted() | エントリ全体を並べ替えた状態で取得したい場合にこれを使用します。
複数の属性で並べ替えることができます。属性に複数の値が設定されていてもだいじょうぶです。
もちろん、昇順 (デフォルト) あるいは降順のどちらでも指定できます。
PHP の定数 SORT_ASC あるいは SORT_DESC
を 2 番目の引数に指定するだけです。 |
sorted_as_struct() | as_struct() と同様、 これはエントリを多次元配列で返します。 しかし、こちらは並べ替えを行います。パラメータについては sorted() を参照ください。 |
shiftEntry() | これは、検索結果の最初の 1 件のエントリを返します。
すべてのエントリを取得した後は FALSE
を返すので、shiftEntry()
は while ループでの使用に適しています。
shiftEntry() と
popEntry() を混用しないようにしましょう! |
popEntry() | shiftEntry とほぼ同じですが、検索結果の最後のエントリから順に返します。 もういちど念のため。shiftEntry() と popEntry() を混用しないようにしましょう! |
既知のエントリをディレクトリサーバから直接取得するには、 Net_LDAP の getEntry() メソッドを使用します。このメソッドのパラメータは、 エントリの DN とエントリから読み込みたい属性のふたつです。 返り値は、取得に成功した場合は Net_LDAP_Entry オブジェクト、 失敗した場合は Net_LDAP_Error オブジェクトとなります。
取得の前に、そのエントリが実際に存在するかどうかを調べたいこともあるでしょう。 その場合は Net_LDAP の dnExists() を使用します。このメソッドは、DN を受け取って true あるいは false を返します。
検索結果からの全エントリの取得
<?php
// すべてのエントリを返します
$entry = $search->entries();
?>
検索結果からの全エントリの取得 (並べ替え)
<?php
// まず 'sn' の降順、次に 'gn' の降順で並べ替えたものを返します
$entry = $search->sorted(array('sn', 'gn'), SORT_DESC);
?>
while ループ内での 1 件ずつの処理
<?php
// エントリを 1 件ずつ返します
while ( $entry = $search->shiftEntry() ) {
// エントリの DN を表示するなど、何らかの処理をします
// 実際に使う場合はエラー処理を忘れないようにしましょう!
echo "ENTRY: " . $entry->dn();
}
?>
Net_LDAP2 以降では、PHP Standard Library (SPL) を用いて検索結果を反復処理することができます。 検索結果の Net_LDAP_Search オブジェクトを、 foreach ループの中で配列と同様に使うだけです。 オプションで、各エントリの DN を取得することもできます。 これは、連想配列のキーを取得するのと同じ方法で行えます。
foreach() によるエントリの取得
<?php
foreach ($search as $dn => $entry) {
// 何かをします
$sn = $entry->getValue('sn', 'single');
echo "Fetched DN: $dn; Surname: $sn";
}
?>