如何通过对象的真正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;
}
任何想法?
答
似乎打破你的搜索的东西是詹姆斯默里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
感谢您修复格式化bc004346! –