如何通过对象的真正DN在php中搜索ldap?

问题描述:

我遇到的问题是,串$named2将工作串$named1不会返回任何结果...如何通过对象的真正DN在php中搜索ldap?

这是我的例子:

$root_dn = "DC=na,DC=company,DC=net"; 

$named1 = "CN=Murray\, James,OU=Users,OU=USA,DC=na,DC=company,DC=net"; 

$named2 = "CN=empNum12345,OU=Users,OU=USA,DC=na,DC=company,DC=net"; 


$named_arr = explode("OU=",$named1,15); 
$named_arr[0] = rtrim($named_arr[0], ','); 

$ldap_query = $named_arr[0]; //CN=Murray\, James 

if($connect_id) { 

    ldap_set_option($connect_id, LDAP_OPT_PROTOCOL_VERSION, 3); 
    ldap_set_option($connect_id, LDAP_OPT_REFERRALS, 0); 

    $bind = ldap_bind($connect_id, $LDAP_LGIN[$SERVER_ID], $LDAP_PASS[$SERVER_ID]); 

    $sr=ldap_search($connect_id, $LDAP_ROOT_DN[$SERVER_ID], $ldap_query); 
    $info = ldap_get_entries($connect_id, $sr); 
    $count = $info["count"]; 
    $rs = ldap_flatresults($connect_id, $sr); 

    echo $rs; 
} 

任何想法?

+0

感谢您修复格式化bc004346! –

似乎打破你的搜索的东西是詹姆斯默里CN中逃脱的逗号。它传递到ldap_seach,并且找不到那个搜索字符串。

所以一个解决办法是字符串传递给ldap_search这样之前剥离反斜杠:

$ldap_query = str_replace('\\', '', $named_arr[0]); 

替代(在我的眼睛更容易)的解决办法是使用DN你已经有了和取通过更换您的ldap_search这个正是出于这个DN数据:

$sr = ldap_read($connect_id, $named1, "objectclass=*"); 

这应该给你詹姆斯·默里的所有属性。

+0

伟大的解决方案... ldap_read是我一直在寻找。 –

+0

太棒了!随意将答案标记为您的解决方案。 ;) – heiglandreas