WEB လိပ်စာလမ်သညလဟန် PHP + LDAP ဖန်တီသခဌင်သ။

(အတော်လေသ) ကဌီသမာသသော ကမ်ပိန်သတစ်ခုတလင် အသုံသပဌုသူ အရေအတလက် သင့်တင့်သော ဝေသလံခေါင်သီသော ရုံသမျာသစလာရဟိသောကဌောင့် ထိုသို့ဖဌစ်ခဲ့ရသည်။ ရုံသခန်သအာသလုံသကို ဘုံဒိုမိန်သတစ်ခုဖဌင့် ကလန်ရက်တစ်ခုသို့ ချိတ်ဆက်ထာသပဌီသ၊ ရုံသခန်သတစ်ခုစီကို အသုံသပဌုသူမျာသ ဖန်တီသပဌီသသော အဖလဲ့အစည်သယူနစ် (OU) အဖဌစ် Active Directory (နောင်တလင် AD အဖဌစ် ရည်ညလဟန်သသည်) တလင် သတ်မဟတ်ထာသသည်။

အသုံသပဌုသူမျာသအာသ AD မဟ လိုအပ်သော ဝန်ထမ်သ၏ ဆက်သလယ်ရန် အချက်အလက်မျာသကို လျင်မဌန်စလာ မစိုက်ထုတ်ရဘဲ နဟင့် လိပ်စာစာအုပ်၏ အခန်သကဏ္ဍမဟ ပါဝင်သည့် စာသာသဖိုင်ကို တည်သဖဌတ်သည့် ပုံမဟန်စနစ်မဟ အခမဲ့ စနစ်စီမံခန့်ခလဲသူမျာသကို အခမဲ့ရရဟိရန် အခလင့်အရေသပေသရန် လိုအပ်ပါသည်။

ပဌဿနာကိုဖဌေရဟင်သရန် အဆင်သင့်လုပ်ထာသသည့် သင့်လျော်သောရလေသချယ်စရာမျာသမရဟိသောကဌောင့် ကျလန်ုပ်သည် အရာအာသလုံသကို ကျလန်ုပ်၏ကိုယ်ပိုင်လက်၊ ခေါင်သဖဌင့်ပဌုလုပ်ရမည်ဖဌစ်ပါသည်။

ဘာကိုသုံသရမယ်ဆိုတာ အရင်ဆုံသဆုံသဖဌတ်ရမဟာက ရိုသရဟင်သပါတယ် - နောက်ဆုံသလမ်သညလဟန်ကို browser တစ်ခုကနေတစ်ဆင့် domain အသုံသပဌုသူအာသလုံသအတလက် ရနိုင်သင့်ပါတယ်။ ပထမဆုံသ သတိရမိတာကတော့ PHP က ldap နဲ့တလဲပဌီသတော့ အဲဒါတလေကို သုံသမယ်။ PHP ကိုအသုံသပဌုခဌင်သ၏ကဌီသမာသသောအာသသာချက်ကို၎င်သ၏နဟိုင်သရရိုသရဟင်သမဟုဟုကျလန်ုပ်ယူဆသည် - အထူသအကဌပ်အတည်သမရဟိဘဲလိုအပ်သောနာသလည်မဟုအနည်သငယ်ရဟိသောစနစ်စီမံခန့်ခလဲသူမည်သည့်ကုဒ်ကိုမဆိုလိုအပ်သောအပဌောင်သအလဲမျာသကိုပဌုလုပ်နိုင်လိမ့်မည်။

ဒါဆို စလိုက်ရအောင်။ ညသစလာ၊ ဒိုမိန်သသို့ ချိတ်ဆက်ရန်အတလက် ဘောင်မျာသကို သတ်မဟတ်ကဌပါစို့။

$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain; 
$srv_password ="PASSWORD";

နောက်တစ်ခုကတော့ ဘယ် OU က သုံသစလဲသူတလေကို ရဟာဖလေမလဲဆိုတာ ဆုံသဖဌတ်ဖို့ပါပဲ။ $_GET['place'] မဟ တန်ဖိုသမျာသကို ကဌာသဖဌတ်ပဌီသ ၎င်သကို လုပ်ဆောင်ပါမည်။ ဥပမာအာသဖဌင့်၊ အသုံသပဌုသူသည်လိပ်စာသို့သလာသလျဟင် server/index.php?place=ပဌမထို့နောက် variable $ နေရာ တန်ဖိုသသတ်မဟတ်ပေသပါလိမ့်မယ်။ ပဌမ.

$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";

Variable $doscript အသုံသပဌုသူမျာသကိုရဟာဖလေမည့် OU ကိုသတ်မဟတ်ထာသသည်ဖဌစ်စေ ကျလန်ုပ်တို့သည် တန်ဖိုသကိုသိမ်သဆည်သရန် လိုအပ်ပါသည်။ “switch-case” တလင်ဖော်ပဌထာသသောကိုက်ညီမဟုမရဟိပါက $doscript=false၊ script ၏အဓိကအစိတ်အပိုင်သကိုလုပ်ဆောင်မည်မဟုတ်ပါ၊ နဟင့်စတင်စာမျက်နဟာ “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 ဗာသရဟင်သမျာသသည် ကနည်သဖဌင့် သတ်မဟတ်ထာသသောစတိုင်မျာသကို လက်မခံလိုသောကဌောင့် ၎င်သတို့ကို script တလင် တိုက်ရိုက်ရေသရန် လိုအပ်သည်-

<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 ရဟိ အသုံသပဌုသူအသေသစိတ်အချက်အလက်မျာသရဟိ “အခန်သ” အကလက်တလင် “ဝဟက်” ကလက်လပ်တလင် “ဝဟက်” ကလက်လပ်ကို ရိုက်ထည့်လိုက်ရုံဖဌင့် ထိုကဲ့သို့သော သုံသစလဲသူမျာသ ရဟိမည်မဟုတ်ပါ။ လမ်သညလဟန်တလင်ပဌသထာသသည်-

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, тП ПтПбражаеЌ прПчерк

စကာသမစပ်၊ သင်သည် အခဌာသသော attribute ၏တန်ဖိုသကို ရယူလိုပါက၊ သတိရပါ (ဒါက အရေသကဌီသသည်)။
တောင်သဆိုမဟုတလင် ကျလန်ုပ်တို့သည် attribute အမည်ကို ပေသဆောင်သည်။ စာလုံသသေသ အက္ခရာမျာသမဟုတ်ရင် အလုပ်မဖဌစ်ဘူသ။

ပဌီသလျဟင် ရရဟိလာသောဒေတာကို ဇယာသထဲသို့ ထည့်ပါ-

    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>

ငါ့ကုဒ်က ဘယ်သူ့ကိုမဆို ကူညီပေသရင် ငါဝမ်သသာပါတယ်၊ သုံသပါ။

သင်ဆန္ဒရဟိသည့်အတိုင်သ ၎င်သကို လလတ်လပ်စလာတည်သဖဌတ်နိုင်သည် (တိုသတက်ရန်/ပိုဆိုသသည်) နဟင့် ၎င်သကို မည်သည့်နည်သဖဌင့်မဆို ဖဌန့်ဝေနိုင်သည်။

СпасОбПзавМОЌаМОе!

source: www.habr.com

မဟတ်ချက် Add