์›น ์ฃผ์†Œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ PHP + LDAP

(์ƒ๋Œ€์ ์œผ๋กœ) ๋Œ€๊ทœ๋ชจ ์บ ํŽ˜์ธ์—๋Š” ์ƒ๋‹นํ•œ ์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋Š” ์›๊ฒฉ ์‚ฌ๋ฌด์‹ค์ด ๋งŽ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋ฌด์‹ค์€ ๊ณตํ†ต ๋„๋ฉ”์ธ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉฐ, ๊ฐ ์‚ฌ๋ฌด์‹ค์€ 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']์—์„œ ๊ฐ’์„ ๊ฐ€๋กœ์ฑ„์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜๋ฉด ์„œ๋ฒ„/index.php?place=๋จผ์ €, ๋‹ค์Œ ๋ณ€์ˆ˜ $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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€