PHP Conference Japan 2024

ldap_dn2ufn

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_dn2ufn將 DN 轉換為使用者易記的命名格式

說明

ldap_dn2ufn(字串 $dn): 字串|false

將指定的 dn 轉換為更易於使用者理解的形式,去除類型名稱。

參數

dn

LDAP 實體的識別名稱 (Distinguished Name)。

傳回值

傳回使用者易記的名稱,如果失敗則傳回 false

新增註記

使用者貢獻的註記 4 則註記

bryan at apachetoolbox dot com
23 年前
此函式會將 "cn=bryan,ou=users,ou=admin,o=apachetoolbox" 轉換為 "bryan,users,admin,apachetoolbox"。
alex at netflex dot nl
22 年前
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
bryan at apachetoolbox dot com
23 年前
function ldap_unf2dn($unf,$delimeter=".") {
$seperated = explode($delimeter,$unf); //以給定的分隔符號分割 unf
$LastKey=count($seperated)-1; //0 是第一個鍵,所以總數-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"
naaina at gmail dot com
19 年前
不知道有沒有人對這個感興趣,但這是以下貼文的修改版,也更具動態性。由於 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)) {
/* Check $pHowToBuild */
if(is_array($pHowToBuild)) {
/* Check if required keys are existent */
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"]);

/* Remove empty values */
foreach($ufnArray as $objKey => $objVal)
if(empty(
$objVal))
array_splice($ufnArray, $objKey, 1);

/* Now build the DN ... */
foreach($ufnArray as $objKey => $objVal) {
$objVal = trim($objVal);

if(
$objKey == 0) {
/* For the object */
$resultDN .= $pHowToBuild["object"] . "=" . $objVal . ",";
} elseif (
$objKey >= $ufnLast) {
/* For last parts of the DN */
$resultDN .= $pHowToBuild["last"][$objKey - $ufnLast] . "=" . $objVal;
if((
$objKey - $ufnLast - 1) != 0) {
$resultDN .= ",";
}
} else {
/* For containers */
$resultDN .= $pHowToBuild["container"] . "=" . $objVal . ",";
}
}
}
}
}

return
$resultDN;
}
?>
To Top