簡體   English   中英

LDAP在PHP中搜索多個DN

[英]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=redou=greenou=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM