此函数会将“cn=bryan,ou=users,ou=admin,o=apachetoolbox”转换为“bryan,users,admin,apachetoolbox”。
(PHP 4, PHP 5, PHP 7, PHP 8)
ldap_dn2ufn — 将 DN 转换为用户友好的命名格式
dn
LDAP 实体的识别名称。
返回用户友好的名称,或在失败时返回 false
。
此函数会将“cn=bryan,ou=users,ou=admin,o=apachetoolbox”转换为“bryan,users,admin,apachetoolbox”。
bryan 的函数仅在您以组织开头并仅使用组织单位作为容器且对象为 CN 时才有效。
例如
$DN = "CN=DNS,CN=Authorized Login Methods,CN=Security";
echo ($DN = ldap_dn2ufn($DN)) . "\n";
echo ($DN = ldap_ufn2dn($DN)) . "\n";
将输出
DNS,Authorized Login Methods,Security
CN=DNS,OU=Authorized Login Methods,O=Security
function ldap_unf2dn($unf,$delimeter=".") {
$seperated = explode($delimeter,$unf); //根据给定的分隔符将 unf 分割
$LastKey=count($seperated)-1; //0 是第一个键,total-1 将是最后一个键
foreach($seperated as $key => $value) {
if ($key == 1) { //第一个变量是 CN
$dn="${dn}cn=$value,";
} elseif ($key == $LastKey) { //最后一个变量,所以它是 O
$dn="${dn}o=$value";
} elseif ($value == "") { //值为空,所以继续
continue;
} else { //只是一个典型的 OU
$dn="${dn}ou=$value,";
}
};
return $dn;
}
$unf=".bryan.users.admin.apachetoolbox";
$dn=ldap_unf2dn($unf);
print "$dn" // 将输出“cn=bryan,ou=users,ou=TS,o=apachetoolbox”
不知道是否有人对此感兴趣,但这是下面帖子的修改版和更动态的版本。由于 ldap_dn2ufn 将“,”用作 UFN 的分隔符,因此我们也将在此处使用它。$pHowToBuild 指定了 DN 将如何构建。
简短示例
$myUFN = ldap_dn2ufn("cn=naaina, ou=container1, ou=container2, ou=container3, o=private, c=de");
echo $myUFN . "\n"; // 将返回“naaina, container1, container2, container3, private, de”
$myDN = $ldapObject->conv_ufn2dn($myUFN);
echo $myDN . "\n"; // 将返回“cn=naaina,ou=container1,ou=container2,ou=container3,o=private,c=de”
对于对象名称,将使用 $pHowToBuild["object"] 作为前缀 - 对于容器 $pHowToBuild["container"] 和最后 n 个元素 $pHowToBuild["last"]。
<?php
function ldap_ufn2dn (
$pUFN,
$pDelimiter = ",",
$pHowToBuild = array(
"object" => "cn",
"container" => "ou",
"last" => array("o", "c")
)
)
{
$resultDN = null;
if(!empty($pUFN)) {
/* 检查 $pHowToBuild */
if(is_array($pHowToBuild)) {
/* 检查必需的键是否存在 */
if(array_key_exists("object", $pHowToBuild) &&
array_key_exists("container", $pHowToBuild) &&
array_key_exists("last", $pHowToBuild))
{
$ufnArray = explode($pDelimiter, $pUFN);
$ufnLast = count($ufnArray) - count($pHowToBuild["last"]);
/* 删除空值 */
foreach($ufnArray as $objKey => $objVal)
if(empty($objVal))
array_splice($ufnArray, $objKey, 1);
/* 现在构建 DN ... */
foreach($ufnArray as $objKey => $objVal) {
$objVal = trim($objVal);
if($objKey == 0) {
/* 对于对象 */
$resultDN .= $pHowToBuild["object"] . "=" . $objVal . ",";
} elseif ($objKey >= $ufnLast) {
/* 对于 DN 的最后部分 */
$resultDN .= $pHowToBuild["last"][$objKey - $ufnLast] . "=" . $objVal;
if(($objKey - $ufnLast - 1) != 0) {
$resultDN .= ",";
}
} else {
/* 对于容器 */
$resultDN .= $pHowToBuild["container"] . "=" . $objVal . ",";
}
}
}
}
}
return $resultDN;
}
?>