我使用PHP在Active Directory中查询用户及其属性。我遇到的问题是,部门经理的LDAP字段不仅返回用户名,还返回FQDN(完全限定域名)路径,如下所示:
CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com
结果保存在字符串$ depManager中。如何仅过滤掉用户名(CN =)?
提前致谢!
答案 0 :(得分: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");
答案 1 :(得分: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。如果这不起作用,你可以像Guillaume建议的那样手动完成。
答案 2 :(得分:0)
你有不同的选择。
CN=
和,
或者你可以使用f.e. 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
的维护者之一