PHP LDAP搜索似乎不匹配*

时间:2011-05-08 23:17:54

标签: php ldap

使用LDAP搜索和*似乎可以正常使用单词,但使用数字它似乎不起作用:

我的类(自制程序)的调试输出:

Query: Peter is string
Search for cn=Peter
Search for cn=Peter*
Found: 439

Query: 7565 is number
Search for PersonID=7565
Search for PersonID=7565*
Found: 0

Query: 7565025 is number
Search for 
Found: 1

很难显示代码,因为它是类的集合,但执行搜索的部分是在for:

之后使用字符串

E.g(这是伪造的)

ldap_search($connection, $base, "cn=Peter*", array("dn"));
ldap_search($connection, $base, "PersonID=7565", array("dn"));
ldap_search($connection, $base, "PersonID=7565025", array("dn"));

你知道为什么7565*上的第二个查询没有返回结果,但是完整数字的最后一个会返回结果吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

您可能知道在LDAP目录中,您有一个SCHEMA。众所周知,SCHEMA提供类(类型)和属性。但事实上,在大多数目录中,SCHEMA为以下属性提供了两个其他功能:

  1. 属性的语法通常由OID提供
  2. 匹配有效用于匹配属性的规则
  3. 示例:

    attributeType ( 2.5.4.41 NAME 'name'
                    DESC 'name(s) associated with the object'
                    EQUALITY caseIgnoreMatch
                    SUBSTR caseIgnoreSubstringsMatch
                    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
    

    在示例中,匹配规则是EQUALITY和SUBSTR,大部分时间都与Directory String语法相关联(1.3.6.1.4.1.1466.115.121.1.15)。

    您可以遇到以下匹配规则:

    EQUALITY
    ORDERING
    SUBSTR
    

    匹配规则SUBSTR是您编写(cn=Peter*)过滤器时常用的一个

    所以我的建议是:查看您的SCHEMA中的属性“PersonID”,“语法/匹配规则”将为您提供可以应用的过滤器类型