2011-05-08 73 views
2

使用LDAP搜索和*似乎做工精细用语言,而是用了一些似乎不工作:从我的课(自制)PHP 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 

的硬类显示代码,因为它是类的集合,但执行搜索的部分是使用字符串后为:

EG(这是制造)

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*上的第二个查询没有返回结果,但是完整数字的最后一个返回结果吗?

谢谢,

+0

您的第二个查询不包含任何”*“字符 – Phil 2011-05-09 02:53:34

回答

0

你可能知道在你的LDAP目录中,你有一个SCHEMA。已知SCHEMA提供类(类型)和属性。但事实上,在大多数目录架构提供了其他两个功能对于那些属性:

  1. 由OID generaly给出的属性的语法被有效地用于匹配属性
  • 匹配规则

    实施例:

    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}) 
    

    在示例中,匹配规则是平等和SUBSTR是最链接至的时间语法(1.3.6.1.4.1.1466.115.121.1.15)。

    您可能会遇到以下的匹配规则:

    EQUALITY 
    ORDERING 
    SUBSTR 
    

    匹配规则SUBSTR是generaly所使用的,当你写(cn=Peter*)过滤

    所以我的建议是:对你的属性一看“是PersonID “在您的SCHEMA和”语法/匹配规则“中将给出您可以应用的过滤器类型