Поиск PHP LDAP, похоже, не соответствует *

#php #ldap

#php #ldap

Вопрос:

Использование LDAP Search и a *, похоже, отлично работает со словами, но с числом, похоже, это не работает:

Отладочный вывод из моего класса (homebrew):

 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:

Например (это сфабриковано)

 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. Ваш второй запрос не содержит никаких * символов

Ответ №1:

Вы, вероятно, знаете, что в вашем каталоге LDAP у вас есть СХЕМА. Обычно известно, что СХЕМА предоставляет классы (типы) и атрибуты. Но на самом деле в большинстве каталогов СХЕМА предоставляет две другие функции для атрибутов, которые :

  1. Синтаксис атрибута, обычно задаваемый OID
  2. Правила сопоставления, которые эффективно используются для сопоставления атрибута

Пример :

 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*) фильтра

Итак, мой совет: посмотрите на свой атрибут «PersonID» в вашей СХЕМЕ, и «правила синтаксиса / сопоставления» предоставят вам тип фильтра, который вы можете применить