2016-04-22 40 views
1

我正在查詢一個相當大的ldap用戶數據集。我真的沒有辦法解決它。我已經構建了其他小型查詢,可以按組,經理和其他關鍵信息進行過濾,但現在,這一個查詢要求我瀏覽公司中的所有用戶(+10萬用戶)。返回的結果集進入jquery自動填充框。因此,這個列表並不會完全瘋狂我使用第六個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

每我做了,你可以用@抑制,但檢查$sr假,然後用ldap_error()要檢查它的註釋:

$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);電話。