фильтровать слово в строке

Я использую PHP для запроса пользователей и их атрибутов в Active Directory. У меня проблема в том, что поле LDAP для Manager Manager не только возвращает имя пользователя, но и путь FQDN (полное доменное имя), как показано ниже:

CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com

Результат сохраняется в строке $ depManager. Как я могу отфильтровать только имя пользователя (CN =)?

Заранее спасибо!

0

Решение

Есть моя простая (возможно, не оптимизированная) функция для извлечения информации из DN:

<?php
function getInfosFromDN($dn)
{
$regexCaptures = "/^(CN=.+),(OU=.+),(DC=.+)$/iU";

$CN = preg_replace($regexCaptures, "$1", $dn);
$OU = preg_replace($regexCaptures, "$2", $dn);
$DC = preg_replace($regexCaptures, "$3", $dn);

return array($CN, $OU, $DC);
}

list($CN, $OU, $DC) = getInfosFromDN("CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com");
0

Другие решения

Там есть разные варианты.

  • Первый вариант — выполнить отдельный LDAP-запрос для получения LDAP-записи для данного DN и получения имени пользователя Users из этого
  • Затем вы можете разобрать строку, используя либо строковые функции PHP, либо регулярное выражение для извлечения части между CN=и ,
  • Или вы можете использовать е. Zend \ Ldap \ Dn как это:

    $dn = new \Zend\Ldap\Dn('CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com');
    echo current($dn->get(0));
    // $dn->get(0) will return ['cn' => 'User Name']
    // so current($dn->get(0)) will return 'User Name'
    

Отказ от ответственности: я один из сопровождающих Zend \ Ldap

0

Я полагаю, вы используете ldap_get_entries для получения атрибута sn / cn / ou / uid?
Возможно, вы можете поэкспериментировать с другими из них (в зависимости от вашей конфигурации, может быть, uid), чтобы получить только настоящее имя пользователя. Нет необходимости в preg_replacing.

Пример:

$sr = ldap_search($ds, $dn, $filter) or die ("bummer");
$results = ldap_get_entries($ds, $sr);
var_dump($results);

Теперь вы можете увидеть, есть ли в вашей базе данных какой-либо атрибут, содержащий значение только имени пользователя, а не всего DN. Если это не сработает, вы всегда можете сделать это вручную, как предложил Гийом.

0
По вопросам рекламы [email protected]