የ WEB አድራሻ ማውጫ PHP + LDAP ይፍጠሩ

አንድ (በአንፃራዊነት) ትልቅ ዘመቻ ጥሩ የተጠቃሚዎች ቁጥር ያላቸው ብዙ የርቀት ቢሮዎች ነበሯቸው። ሁሉም ቢሮዎች የጋራ ጎራ ካለው አንድ አውታረ መረብ ጋር የተገናኙ ናቸው፣ እያንዳንዱ ቢሮ በActive Directory (ከዚህ በኋላ AD እየተባለ የሚጠራው) እንደ ድርጅት ክፍል (OU) ተገልጿል፣ በዚህ ውስጥ ተጠቃሚዎች ቀደም ብለው የተፈጠሩ ናቸው።

ተጠቃሚዎች በፍጥነት እና ያለ ምንም ጥረት ተፈላጊውን ሠራተኛ አድራሻ ከ AD, እና ነጻ ሥርዓት አስተዳዳሪዎች የአድራሻ ደብተር ሚና የሚጫወተውን የጽሑፍ ፋይል አርትዖት መደበኛ ለማግኘት እድል መስጠት አስፈላጊ ነበር.

ችግሩን ለመፍታት ዝግጁ የሆኑ ተስማሚ አማራጮች አልነበሩም, ስለዚህ ሁሉንም ነገር በገዛ እጄ እና ጭንቅላቴ ማድረግ ነበረብኝ.

በመጀመሪያ ምን እንደሚጠቀሙ መወሰን ያስፈልግዎታል በሚለው እውነታ እንጀምር ፣ ቀላል ነው - የመጨረሻው ማውጫ በአሳሽ በኩል ለሁሉም የጎራ ተጠቃሚዎች መገኘት አለበት። ወደ አእምሮ የሚመጣው የመጀመሪያው ነገር ፒኤችፒ ከ ldap ጋር በማጣመር ነው, እና እኛ እንጠቀማቸዋለን. ፒኤችፒን የመጠቀም ትልቅ ጥቅም አንጻራዊ ቀላልነቱ አድርጌ እቆጥረዋለሁ - ማንኛውም የስርዓት አስተዳዳሪ ትንሽ ግንዛቤ ያለው እንኳን በኮዱ ላይ አስፈላጊውን ለውጥ ማድረግ ይችላል፣ አስፈላጊም ከሆነ፣ ያለ ልዩ ችግር።

ስለዚህ, እንጀምር. በመጀመሪያ፣ ከጎራው ጋር ለመገናኘት መለኪያዎችን እናስቀምጥ፡-

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

የሚቀጥለው ነጥብ በየትኛው OU ውስጥ ተጠቃሚዎችን እንደምንፈልግ መወሰን ነው. ከ$_GET['ቦታ'] ያሉ እሴቶችን በመጥለፍ ይህንን እናደርጋለን። ለምሳሌ, ተጠቃሚው ወደ አድራሻው ከሄደ አገልጋይ/index.php?ቦታ=አንደኛ፣ ከዚያ ተለዋዋጭ $ ቦታ እሴት ይመደባል አንደኛ.

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

ተለዋዋጭ $ ሰነድ እሴቱን ለማስቀመጥ ያስፈልጋል - ተጠቃሚዎችን የምንፈልግበትን OU ገለፅን ወይም አልገለፅንም። በ"switch-case" ውስጥ የተዘረዘሩ ተዛማጆች ከሌሉ፣ $doscript=false፣የስክሪፕቱ ዋና ክፍል አይተገበርም እና የመነሻ ገጹ "ዋና_ጠረጴዛ.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>";

በመቀጠል የተጠቃሚ ውሂብን በ loop ውስጥ እንቀበላለን እና እናስኬዳለን ፣ አንዳንድ (ለምሳሌ ፣ አገልግሎት) መለያዎችን ለመደበቅ ፣ በ 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, то отображаем прочерк

በነገራችን ላይ የሌላ ባህሪን ዋጋ ማግኘት ከፈለጉ ያስታውሱ (ይህ አስፈላጊ ነው)
በጥያቄው ውስጥ የባህሪውን ስም እናስተላልፋለን ንዑስ ሆሄያት ፊደላት, አለበለዚያ አይሰራም.

እና የተቀበለውን ውሂብ በሰንጠረዡ ውስጥ ያስገቡ-

    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" ፋይል አገናኞች ያሉት ቀላል የኤችቲኤምኤል ገጽ ነው፣ እና ይህን ይመስላል።

<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>

የእኔ ኮድ ማንንም የሚረዳ ከሆነ ደስ ይለኛል, ይጠቀሙበት!

እንዲሁም እንደፈለጋችሁት በነጻነት አርትኦት ማድረግ ትችላላችሁ (አሻሽሉ/የከፋ) እና በማንኛውም መንገድ ማሰራጨት።

ለሚያደርጉት ጥረት እናመሰግናለን!

ምንጭ: hab.com

አስተያየት ያክሉ