[英]LDAP search multiple DNs in PHP
根據php.net手冊中的這些 帖子 ,應該可以為ldap_search()
提供多個DN。
但是,我無法使以下實現起作用:
$dn[] = 'ou=Red,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Green,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Blue,ou=Teams,ou=Users,dc=example,dc=org';
$query = ldap_search($conn, $dn, $filter, $attrs);
通過任何單個DN字符串時,一切都很好,但是提供數組將出現錯誤消息:“無此類對象”。
一個明顯的解決方法是遍歷我的DN數組,以觸發單獨的查詢並將所有內容推送到一個數組中。 我想避免這樣做,因為我要在一個DN中帶回8000+個對象(分頁-示例2) ,而在另外兩個DN中都帶回300個對象。
實際上可以搜索多個DN嗎? 單個DN字符串中是否可能有特殊語法(符號/字符)?
搜索請求必須至少包含以下參數:
base
是基礎對象本身, one
是基礎對象,在基礎對象下一級, sub
是基礎對象,所有條目都在基礎對象之下。 也可以提供屬性列表,但是如果搜索請求中未提供任何用戶屬性,則許多(但不是全部)LDAP API將請求所有用戶屬性。
在列出的情況下,將基礎對象設置為ou=users,dc=example,dc=com
並使用適當的過濾器。 如果LDAP客戶端必須將返回的條目限制為從屬於ou=red
, ou=green
或ou=blue
條目,則可以使用復合可擴展匹配過濾器,如(&(objectClass=inetOrgPerson)(|(ou:dn:=red)(ou:dn:=green)(ou:dn:=blue)))
-如果數據不使用inetOrgPerson
則使用正確的對象類。 所有LDAP兼容服務器均支持可擴展的匹配過濾器,但非兼容服務器可能不支持此標准過濾器。
不可能使用多個基礎對象, scope
參數定義了在基礎對象下檢查了多少個從屬級別。
您在手冊中看到了嗎?
這些數組的大小必須與鏈接標識符數組的大小相同,因為該數組的第一個條目用於一個搜索,第二個條目用於另一個搜索,依此類推。
基本上,您的$conn
變量需要是一個連接數組,其大小等於$dn
數組的大小。
如果$dn
數組中有3個元素,則$conn
數組中需要3個元素:
$ds = ldap_connect($ldapserver);
$dn[] = 'ou=Red,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Green,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Blue,ou=Teams,ou=Users,dc=example,dc=org';
// Match connection elements to count of dn elements
for($x=0, $x < count($dn), $x++)
{
$conn[] = $ds;
}
$query = ldap_search($conn, $dn, $filter, $attrs);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.