过滤字符串中的单词
filter word in string
我正在使用 PHP 查询 Active Directory 中的用户及其属性。我遇到的问题是部门经理的 LDAP 字段不仅返回用户名,还返回 FQDN(完全限定域名)路径,如下所示:
CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com
结果保存在字符串 $depManager 中。如何只过滤掉用户名(CN=)?
提前致谢!
我有一个简单的(可能未优化的)函数可以从 DN 中获取信息:
<?php
function getInfosFromDN($dn)
{
$regexCaptures = "/^(CN=.+),(OU=.+),(DC=.+)$/iU";
$CN = preg_replace($regexCaptures, "", $dn);
$OU = preg_replace($regexCaptures, "", $dn);
$DC = preg_replace($regexCaptures, "", $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");
我想你目前正在使用 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 的建议手动完成。
你有不同的选择。
- 第一个选项是执行单独的 LDAP 查询以获取给定 DN 的 LDAP 条目并从中检索用户用户名
- 然后您可以使用 PHP 字符串函数或正则表达式解析字符串以获取
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
的维护者之一
我正在使用 PHP 查询 Active Directory 中的用户及其属性。我遇到的问题是部门经理的 LDAP 字段不仅返回用户名,还返回 FQDN(完全限定域名)路径,如下所示:
CN=User Name,OU=Users,OU=companyBranchOffice,OU=companyName,DC=subdomain,DC=domain,DC=com
结果保存在字符串 $depManager 中。如何只过滤掉用户名(CN=)?
提前致谢!
我有一个简单的(可能未优化的)函数可以从 DN 中获取信息:
<?php
function getInfosFromDN($dn)
{
$regexCaptures = "/^(CN=.+),(OU=.+),(DC=.+)$/iU";
$CN = preg_replace($regexCaptures, "", $dn);
$OU = preg_replace($regexCaptures, "", $dn);
$DC = preg_replace($regexCaptures, "", $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");
我想你目前正在使用 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 的建议手动完成。
你有不同的选择。
- 第一个选项是执行单独的 LDAP 查询以获取给定 DN 的 LDAP 条目并从中检索用户用户名
- 然后您可以使用 PHP 字符串函数或正则表达式解析字符串以获取
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
的维护者之一