(์๋์ ์ผ๋ก) ๋๊ท๋ชจ ์บ ํ์ธ์๋ ์๋นํ ์์ ์ฌ์ฉ์๊ฐ ์๋ ์๊ฒฉ ์ฌ๋ฌด์ค์ด ๋ง์ด ์์์ต๋๋ค. ๋ชจ๋ ์ฌ๋ฌด์ค์ ๊ณตํต ๋๋ฉ์ธ์ ํตํด ํ๋์ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ๋๋ฉฐ, ๊ฐ ์ฌ๋ฌด์ค์ Active Directory(์ดํ AD)์์ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ์์ฑ๋ ์กฐ์ง ๋จ์(OU)๋ก ์ ์๋์์ต๋๋ค.
์ฌ์ฉ์์๊ฒ AD์์ ํ์ํ ์ง์์ ์ฐ๋ฝ์ฒ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ป์ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํ๊ณ ์์คํ
๊ด๋ฆฌ์๊ฐ ์ฃผ์๋ก ์ญํ ์ ํ๋ ํ
์คํธ ํ์ผ์ ํธ์งํ๋ ์ผ์์ ์ธ ์์
์์ ๋ฒ์ด๋๋๋ก ํด์ผ ํ์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ์ ํ ์ต์ ์ด ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ง ์์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์ ๋ด ์๊ณผ ๋จธ๋ฆฌ๋ก ์ง์ ํด์ผ ํ์ต๋๋ค.
๋จผ์ ๋ฌด์์ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค๋ ์ฌ์ค๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ๊ฐ๋จํฉ๋๋ค. ์ต์ข ๋๋ ํฐ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋๋ฉ์ธ์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ๊ฒ์ ldap๊ณผ ๊ฒฐํฉ๋ PHP์ด๋ฉฐ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ์ ๋ PHP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด ์๋์ ๋จ์์ฑ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฝ๊ฐ์ ์ดํด๋ง ์๋ ์์คํ ๊ด๋ฆฌ์๋ผ๋ฉด ํ์ํ ๊ฒฝ์ฐ ํน๋ณํ ๋ถ๋ด ์์ด ์ฝ๋์ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ ์์ ๊ฒ์ ๋๋ค.
๊ทธ๋ผ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค.
$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain;
$srv_password ="PASSWORD";
๋ค์ ๋จ๊ณ๋ ์ฌ์ฉ์๋ฅผ ๊ฒ์ํ OU๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์
๋๋ค. $_GET['place']์์ ๊ฐ์ ๊ฐ๋ก์ฑ์ ์ด๋ฅผ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ํด๋น ์ฃผ์๋ก ์ด๋ํ๋ฉด
$place = (@$_GET['place']);
$doscript=true;
switch($place){
case "first" :
$dn ="OU=ou1,OU=DOMAIN,dc=DOMAIN,dc=COM";
break;
case "second":
$dn ="OU=ou2,OU=DOMAIN,dc=DOMAIN,dc=COM";
break;
//ะทะดะตัั ะผะพะถะฝะพ ะดะพะฑะฐะฒะธัั ะตัั ััะปะพะฒะธะน.
default:
$doscript=false;
break;
}
if (!$doscript) include "main_table.html";
๋ณ์ $doscript ์ฌ์ฉ์๋ฅผ ๊ฒ์ํ OU๋ฅผ ์ ์ํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๊ฐ์ ์ ์ฅํ๋ ๋ฐ ํ์ํฉ๋๋ค. "switch-case", $doscript=false์ ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ์คํฌ๋ฆฝํธ์ ์ฃผ์ ๋ถ๋ถ์ด ์คํ๋์ง ์๊ณ ์์ ํ์ด์ง "main_table.html"์ด ํ์๋ฉ๋๋ค. ๋งจ ๋ง์ง๋ง์ ์์ด์).
OU๋ฅผ ์ ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ์์ ์ ์งํํฉ๋๋ค. ์ฌ์ฉ์๋ฅผ ์ํ ๋๋ ํฐ๋ฆฌ ํ์ด์ง๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์์ํฉ๋๋ค.
else if ($doscript) {
{echo "
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<link rel='shortcut icon' href='ico.png'>
<meta charset='windows-1251/ '>
๋ณด๋ค ๋ณด๊ธฐ ์ข์ ์คํ์ผ์ ํฌํจํฉ๋๋ค(์, CSS ํ์ผ๋ก ํฌํจ๋ ์ ์์ง๋ง ์ผ๋ถ IE ๋ฒ์ ์์๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ค์ ๋ ์คํ์ผ์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ์คํฌ๋ฆฝํธ์ ์ง์ ์์ฑํด์ผ ํฉ๋๋ค).
<style>
*{text-align: center; font-family:tahoma; font-size:14px;}
a{text-decoration: none; color: #000;}
a:hover{text-decoration: underline; color: #0059FF;}
#bold{text-decoration: none; font-weight: 600;font-size:20px;}
#table,tr,td{border-style:solid;border-width:1px; border-collapse:collapse;padding:5px; height:22px;border-color:#7d7d7d;}
/* ะะตัะตัะฝัะต ัััะพะบะธ */#table tbody tr:nth-child(odd){background: #fff;}
/* ะงะตัะฝัะต ัััะพะบะธ */ #table tbody tr:nth-child(even){background: #F7F7F7;}
#noborder{border-width: 0 px; border-style: none;}
#sp30px{text-indent: 30px;text-align: justify;}
#smallsize{font-family:tahoma; text-indent: 5px; text-align:left; font-size:12px;}
#top {background: #ffffff;
text-align: center;
left:0;
top:0px;
table-layout: fixed;
border-style:solid;
border-width:0px;
border-collapse:collapse;
padding:0px;
height:22px;
border: 0px;
z-index: 99999;
display:block;
width:80px;
opacity: 0.6;
filter: alpha(Opacity=60);
height:100%;
position:fixed;}
#top:hover{background: #afafaf;opacity: 100;filter: alpha(Opacity=100);text-decoration: none;color: #000000;}
.smalltext{padding-top: 1px;
padding-bottom: 1px;
text-align: bottom;
font-family:tahoma;
color: #a0a0a0;
line-height: 7px;
font-size: 10px;}
.smalltext:hover{color: #0000ff;}
.transition-rotate {position: relative;
z-index: 2;
margin: 0 auto;
padding: 5px;
text-align: center;
max-width: 500px;
cursor: pointer;
transition: 0.1s linear;}
.transition-rotate:hover {-webkit-transform: rotate(-2deg); transform: rotate(-2deg);}
#lineheight{
text-align: left;
line-height: 1px;
text-decoration: none;
font-weight: 600;
font-size:20px;}
</style>
์คํ์ผ ์์ ์ด ์๋ฃ๋์์ต๋๋ค. ์ด์ ํญ ์ ๋ชฉ์ ์์ฑํ๊ณ ๋ฉ์ธ ํ์ด์ง๋ก ๋์๊ฐ ์ ์๋ ํธ๋ฆฌํ ๋งํฌ๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
<title>Adressbook of ยซYourMegaCompanyNameยป</title>
</head>
<body style='background-color:#ffffff;'>";
}
echo "
<table id='top'><tr><td id='top'>
<a href='index.php?place=main' id='top' >
<br><br><br>
<img src='back_to_main.png' alt='' border='0' width='75' height='60'/>
<p>ะะฐ ะณะปะฐะฒะฝัั</p></a>
</td></tr></table>
";
AD๋ณ๋ก ๊ฒ์ ํํฐ๋ฅผ ์ ์ํ๊ณ OU์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; //ะฒัะต ะฟะพะปัะทะพะฒะฐัะตะปะธ, ะบัะพะผะต ะพัะบะปััะตะฝะฝัั
.
$filter2 ="(objectCategory=OrganizationalUnit)"; // ะดะปั ะฟะพะปััะตะฝะธั ะธะฝัะพัะผะฐัะธะธ ะพ OU
$ds=ldap_connect($srv);
if ($ds) {
$r=ldap_bind($ds,$srv_login,$srv_password);;
ldap_set_option($ds,LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
$sr=ldap_search($ds,$dn ,$filter );
ldap_sort($ds,$sr, "givenname");
$info = ldap_get_entries($ds, $sr);
$sr2=ldap_search($ds,$dn ,$filter2 );
$placeinfo = ldap_get_entries($ds, $sr2);
$PlaceName = $placeinfo[0]["l"][0]; // name of place
$PlaceAddres = $placeinfo[0]["street"][0]; // address of place
$PlaceMail = $placeinfo[0]["description"][0]; // mail of place
$PlacePhone = $placeinfo[0]["st"][0]; // phone of plase
๋ค์์ผ๋ก ํ์ด์ง ์๋จ์ ๋์์ธํฉ๋๋ค.
echo"<table align='center' height = '80'>
<td id='noborder' ><div id='lineheight'>". $PlaceName ."</div></td></tr>
<tr><td id='noborder' >". $PlaceAddres ."</td></tr>
</table>
<table align='center' id='table'>
<tr><td width='35' bgcolor = #f0f0e4> โ </td>
<td width='300' bgcolor = #f0f0e4> Name </td>
<td width='250' bgcolor = #f0f0e4> E-mail </td>
<td width='60' bgcolor = #f0f0e4> Phone </td>
<td width='150' bgcolor = #f0f0e4> Mobile </td></tr>
<tr><td></td><td> ะะฐะฝะฝัะต OU </td><td>";
echo "<div class='transition-rotate'><a href=mailto:" . $PlaceMail .">" . $PlaceMail ." </a></div>";
echo "</td><td width='150'> " . $PlacePhone ." </td><td> - </td></tr>";
๋ค์์ผ๋ก, ๋ฃจํ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค. ์ผ๋ถ(์: ์๋น์ค) ๊ณ์ ์ ์จ๊ธฐ๋ ค๋ฉด AD์ ์ฌ์ฉ์ ์ธ๋ถ ์ ๋ณด์ ์๋ "room" ํ๋์ "hide"๋ฅผ ์ ๋ ฅํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋๋ ํ ๋ฆฌ์ ํ์๋ฉ๋๋ค:
for ($i=0; $i<$info["count"];$i++) {
$UserHide = $info[$i]["physicaldeliveryofficename"][0];
if ($UserHide != 'hide') {
$UserName = $info[$i]["cn"][0]; //ะะผั ะฟะพะปัะทะพะฒะฐัะตะปั
$UserPosition = $info[$i]["title"][0]; // ะะพะปะถะฝะพััั
$UserMail = $info[$i]["mail"][0]; //mail
if (!$UserMail)) $UserMail = "-"; //ะตัะปะธ ะฝะตั ะดะฐะฝะฝัั
ะพ ััะธะบะต ะฒ AD, ัะพ ะพัะพะฑัะฐะถะฐะตะผ ะฟัะพัะตัะบ
$UserIpPhone = $info[$i]["ipphone"][0]; //ip phone
if (!$UserIpPhone) $UserIpPhone = "-"; //ะตัะปะธ ะฝะตั ะดะฐะฝะฝัั
ะพ ััะธะบะต ะฒ AD, ัะพ ะพัะพะฑัะฐะถะฐะตะผ ะฟัะพัะตัะบ
$UserMobile = $info[$i]["mobile"][0]; //mobile
if (!$UserMobile) $UserMobile = "-"; //ะตัะปะธ ะฝะตั ะดะฐะฝะฝัั
ะพ ััะธะบะต ะฒ AD, ัะพ ะพัะพะฑัะฐะถะฐะตะผ ะฟัะพัะตัะบ
๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ ์์ฑ์ ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค๋ฉด ๋ค์์ ๊ธฐ์ตํ์ธ์(์ค์).
์์ฒญ์์ ์์ฑ ์ด๋ฆ์ ์ ๋ฌํฉ๋๋ค. ์๋ฌธ์ ํธ์ง๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ฝ์ ํฉ๋๋ค.
echo "<tr>
<td>". $n+=1 ."</td>
<td> ". $UserName ."<br> <div class='smalltext'>". $UserPosition ."</div></td><td>"; // ะะผั ะฟะพะปัะทะพะฒะฐัะตะปั ะธ ะดะพะปะถะฝะพััั
if ($UserMail !='-') echo "<div class='transition-rotate'><a href=mailto:'$UserMail'>$UserMail </a></div>"; // ะตัะปะธ ั ะฟะพะปัะทะพะฒะฐัะตะปั ะตััั e-mail ัะพะทะดะฐัะผ ัััะปะบั ะฝะฐ ะพัะฟัะฐะฒะบั ะฟะธััะผะฐ
else echo "-"; //ะตัะปะธ ะฝะตั e-mail - ััะฐะฒะธะผ ะฟัะพัะตัะบ.
echo "<td> ". $UserIpPhone ." </td>
<td> ". $UserMobile ." </td></tr>";
}
}
echo "</table>";
๋ค์์ผ๋ก LDAP ์ฐ๊ฒฐ์ ๋ซ๊ฑฐ๋ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์๋ค๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
ldap_close($ds);
}
else echo "<h4>Unable to connect to LDAP server</h4>";
echo '<br><br><br></body></html>';}
๋ด๋ถ์ "main_table.html" ํ์ผ์ ๋งํฌ๊ฐ ํฌํจ๋ ๊ฐ๋จํ HTML ํ์ด์ง์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<head>
<link rel="shortcut icon" href="ico.png"/>
<meta charset="windows-1251"/>
<title>Adressbook of ยซYourMegaCompanyNameยป</title>
</head>
<body style='background-color:#ffffff;'>
<center><a href=index.php><IMG border="none" src="logo.png"/></a></center>
<center><b>Places and offices</b></center>
<br>
<table border="0" width="450" bgcolor="#dddddd" align="center" valign="middle" CELLSPACING="0">
<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou1">OU1</a></td></tr>
<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou2">OU2</a></td></tr>
</table></body></html>
๋ด ์ฝ๋๊ฐ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋๋ค๋ฉด ๊ธฐ๊บผ์ด ์ฌ์ฉํ๊ฒ ์ต๋๋ค!
๋ํ ์ํ๋ ๋๋ก ์์ ๋กญ๊ฒ ํธ์ง(๊ฐ์ /์ ํ)ํ๊ณ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค!
์ถ์ฒ : habr.com