エントリの取得

エントリの取得 -- 検索結果からエントリを直接取得する方法

エントリを直接取得する

エントリを取得するにはいくつかの方法があります。 直接取得するか search リクエストを実行するかのいずれかです。 エントリを直接取得したい場合は、その完全識別名 (DN) を知っている必要があります。 既知のエントリを直接ディレクトリサーバから取得するには、 Net_LDAPgetEntry() メソッドを使用します。このメソッドのパラメータは、 エントリの DN とエントリから読み込みたい属性のふたつです。 返り値は、取得に成功した場合は Net_LDAP_Entry オブジェクト、 失敗した場合は Net_LDAP_Error オブジェクトとなります。

取得の前に、そのエントリが実際に存在するかどうかを調べたいこともあるでしょう。 その場合は Net_LDAPdnExists() を使用します。このメソッドは、DN を受け取って true あるいは false を返します。

検索結果からエントリを取得する

もうひとつの方法としては、検索結果からエントリを取得するというものがあります。 "検索" のところで説明したように、検索結果のエントリにアクセスするには Net_LDAP_Search オブジェクトを使用します。 このオブジェクトは Net_LDAPsearch() メソッドで取得することができます。以下にあげる各メソッドは、 何か問題が発生した場合に Net_LDAP_Error オブジェクトを返します。エラーチェックを忘れないでください! エントリを読み込む方法を以下に列挙します。

表 54-1エントリを取得する方法

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_LDAPgetEntry() メソッドを使用します。このメソッドのパラメータは、 エントリの DN とエントリから読み込みたい属性のふたつです。 返り値は、取得に成功した場合は Net_LDAP_Entry オブジェクト、 失敗した場合は Net_LDAP_Error オブジェクトとなります。

取得の前に、そのエントリが実際に存在するかどうかを調べたいこともあるでしょう。 その場合は Net_LDAPdnExists() を使用します。このメソッドは、DN を受け取って true あるいは false を返します。

反復処理 (foreach) によるエントリの取得

Net_LDAP2 以降では、PHP Standard Library (SPL) を用いて検索結果を反復処理することができます。 検索結果の Net_LDAP_Search オブジェクトを、 foreach ループの中で配列と同様に使うだけです。 オプションで、各エントリの DN を取得することもできます。 これは、連想配列のキーを取得するのと同じ方法で行えます。