2016-04-22 15 views
1

かなり大きなLDAPユーザーデータセットを照会しています。そして、私は本当にそれの周りに方法がありません。私は、グループ、マネージャー、その他の重要な情報でフィルタリングできる他の小さなクエリを構築しましたが、この1つのクエリでは会社内のすべてのユーザー(100,000人のユーザー)を調べる必要があります。返された結果セットは、jqueryオートコンプリートボックスに入ります。このリストが完全に狂っていないように、返される結果の数を制限するための6番目のldap_searchパラメーターを使用しています。基本的に、ユーザーがまだユーザーを見ていない場合は、必要な文字を追加する必要があります。PHP ldap_search警告が表示されない制限に達しました

$sr=ldap_search($ds, $dn, $search, $filter,0,15); 

問題は制限がldap_searchを上に到達した場合、それは、これはすべての結果が返されたではないことを伝えるために、データセットとの警告メッセージを返すことです。これはオートコンプリートボックスの人口を破壊します。制限が設定されている以上の結果がある場合、警告を無視できるようにしたい。

**私は、ldap_search関数から返されたすべてのエラーメッセージを排除したくないということです。だから、php '@'抑止法を使うのは問題外です。

誰かがこれに対処する別の方法を知っていますか?

+0

問題点に関しては、どのように他のエラーメッセージを使用していますか?あなたは '@'で抑止できますが、 '$ sr'でfalseをチェックしてから' ldap_error() 'を使って調べます。データはリアルタイムでなければならないのですか?潜在的に定期的にLDAPにすべての結果を照会し、それらをキャッシュし、必要に応じてキャッシュ結果に対して照会することができます。それは達成するためにかなり多くの論理を取るだろうが。 – ChadSikorra

+0

あなたの最初の質問に答えるには:組織が設定されているため、さまざまな部門が自分の従業員の情報をADに提出します。ほとんどの場合、従業員の画像をプルダウンするときに、データセットがローカルキャッシュには大きすぎるなどの問題が発生し、php ldapクエリ全体がエラーをスローします。これは単なる一例ですが、それは私が扱っている種類のものです。 – Alex

+0

あなたが言ったことを私にもたらします。これまでテストしたことがある場合は、ldap_error()を使用すると、私が現在追跡しているイベントを監視することができます。これは完璧です!ありがとうございました。私はそれを正しい印を付けることができるように答えとして提出したいですか? – Alex

答えて

1

通信しているLDAPサーバーによっては、ページングされた検索結果や仮想リストビュー(VLV)コントロールがサポートされている場合があります。これらの両方を使用して、大きな検索結果セットにページを設定することができます。 PHPでページング結果コントロールのためのサポートがあるようです LDAP: How to return more than 1000 results (java)

、以下を参照してください: http://php.net/manual/it/function.ldap-control-paged-result.php

私はこのことができます願っていますが、ここで、この上でいくつかの議論を(例はJavaであるが)見ることができます。私はあなたが@に抑えるが、偽のため$srをチェックし、それをチェックするためにldap_error()を使用することができ、作られたコメントパー

1

$sr = @ldap_search($ds, $dn, $search, $filter, 0, 15); 

if (!$sr) { 
    $error = ldap_error($ds); 
    $code = ldap_errno($ds); 
    echo "($code) $error"; 
} else { 
    // do something with the results... 
} 

あなたが表示され、まだLDAP関数からエラーを抑制することができますが、その方法を/必要に応じてエラーメッセージ/コードを記録してください。

ページングを使用することによりだろうこれを行うための別の方法:

// Force LDAP to return sets of 15 results at a time 
ldap_control_paged_result($ds, 15); 

$sr = ldap_search($ds, $dn, $search, $filter, 0); 
$entries = ldap_get_entries($ds, $sr); 

// Reset the page control so you don't interfere with other searches 
ldap_control_paged_result($ds, 0); 

上記はまた、あなたがLDAP V3を使用していて、すでにldap_connect()後、あなたのコードのどこかで必要なldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);呼び出しを行ったと仮定しています。

関連する問題