2016-12-06 2 views
0

私はldap_searchとPHPを使いこなしていましたが、$ sizelimit属性を使って結果の量を制限することはできますが、そのサイズ制限の範囲を選択することができませんでした。LDAP PHPフィルタの範囲?

コード:

$result = ldap_search($ldapconnect,$ldaptree, "(|(cn=a*)(cn=b*))", $attributes, 0, 100) or die ("Error in search query: ".ldap_error($ldapconnect)); 

具体的には。私は60,000のエントリを持っているLDAPデータベースを探しています、私はいつも前の結果でarray_sliceを行うことができますが、それは永久にそれがまだほぼDB全体から引っ張ると考えています。 2番目の100のエントリと3番目のエントリなどを取得する方法はありますか?

ありがとうございました!

ジョー

答えて

0

それが特定の範囲からフィルタリングしたり、PHPとLDAPを介したクエリに相殺することはできません。 paging(例2を参照)を使用して、結果のループ内の特定の結果セットをスキップして特定の結果のみを保持することができます。次に、あなたが必要とするものは、ldap_control_paged_result($link, 0);を実行してページング操作を中止します。しかし、これはまだかなり非効率的です。

LDAPは、単純なページング方法よりも高度なオプションを持つVLV(仮想リストビュー)という概念をサポートしています。 VLVを使用すると、オフセットと特定の範囲を定義できます。そこPHPのLDAPモジュールにVLVのサポートを追加するために提出してもパッチがあったが、誰もそれに任意のアクション取っていない:その向こう

https://bugs.php.net/bug.php?id=62853&edit=2

を、私の最高のアドバイスは、使用してクエリをより効率的にすることですフィルタ内にobjectClassおよびobjectCategoryがあります。また、クエリを試行する前に、検索フィルタで少なくとも2〜3文字を必要とします。

+0

優秀な回答。 +1。 2文字または3文字のフィルタはうまく動作しません.60kのリスト全体が必要で、その周りには方法がありません。とにかくいつでもすぐにそのVLV上を移動する予定のようには思えません...どうもありがとう!感謝します。 –