2011-07-29 48 views
1

我在使用LDAP得到這個錯誤,我知道我的最大數量爲25LDAP大小越界 - 捕捉警告

Warning: ldap_search() [function.ldap-search]: Partial search results returned: Sizelimit exceeded in

我怎麼能抓住這個和輸出部分結果,並顯示有取得了許多成果。或者我可以只顯示有很多結果嗎?

任何想法?

+0

http://stackoverflow.com/questions/1241728/try-and-catch-a-warning –

+0

什麼LADP版本?打開? –

+0

Sheifs評論是完美的,生病使用該方法! – Luke

回答

3

目錄服務器強加的限制:

  • 對象從搜索
  • 的時間花在搜索量恢復的數
  • 條目的數量在創建時檢查候選列表

根據服務器的不同,可以通過全局配置,通過客戶端連接策略或基於身份驗證標識來施加限制。搜索響應中的結果表明部分結果已返回給客戶端。客戶可以(也應該)在搜索請求中加入大小限制和時間限制,但這些限制(稱爲客戶請求的限制)不能覆蓋服務器限制。

一個正確編碼的API將返回最多爲sizelimit條目數的條目。換句話說,如果有3個條目與搜索參數匹配,則客戶端將客戶端請求的大小限制設置爲2,服務器將返回2個條目(以任意順序,LDAP條目不排序,即排序不是可重複),並將搜索結果代碼設置爲「超出尺寸限制」。

雖然AD使用1000可能是常識,但應用程序不得使用服務器供應商,版本或配置方面的知識進行編碼。這樣做是糟糕的形式,而不是專業的,並導致脆弱,不可維護的代碼。爲您的應用程序編碼,因爲您連接的服務器是完全符合IETF LDAP目錄標準的通用LDAP服務器。

我的blog entry有一些關於搜索請求和搜索響應的討論,並且我還創建了一篇LDAP: Programming Practices文章。

+1

另外AD默認情況下已打開1000個對象限制。 – geoffc

+0

您的博客仍然存在,但您的ldapmaven.info網站是403ing。 – Rikki

0
$resource = ldap_search($link_identifier, $base_dn, $filter); 
if (ldap_errno($link_identifier) === 4) 
    echo 'Partial search results returned'; 

$resource = ldap_search($link_identifier, $base_dn, $filter); 
if (strtoupper(ldap_error($link_identifier)) === 'SIZE LIMIT EXCEEDED') 
    echo 'Partial search results returned';