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

时间:2017-03-07 22:49:39

标签: php ldap

我遇到的问题是字符串$named2将起作用字符串$named1不会返回任何结果......

以下是我的例子:

$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;
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎打破了你的搜索的是詹姆斯·默里的CN中逃脱的逗号。它被传递给ldap_seach并且无法找到任何带有该搜索字符串的内容。

所以一个解决方案就是在将字符串传递给ldap_search之前去掉反斜杠:

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

替代方案(在我看来更简单)解决方案是使用您已有的DN并通过将ldap_search替换为此来获取该DN的数据:

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

这应该会给你James Murray的所有属性。