Kuunda saraka ya anwani ya WEB PHP + LDAP

Ilifanyika kwamba kampeni kubwa (kiasi) ilikuwa na ofisi nyingi za mbali na idadi nzuri ya watumiaji. Ofisi zote zimeunganishwa kwenye mtandao mmoja wenye kikoa cha pamoja, kila ofisi ilifafanuliwa katika Active Directory (hapa inajulikana kama AD) kama Kitengo cha Shirika (OU), ambamo watumiaji walikuwa tayari wameundwa.

Ilikuwa ni lazima kuwapa watumiaji fursa ya kupata haraka na kwa urahisi maelezo ya mawasiliano ya mfanyakazi anayehitajika kutoka kwa AD, na wasimamizi wa mfumo wa bure kutoka kwa utaratibu wa kuhariri faili ya maandishi ambayo ilichukua jukumu la kitabu cha anwani.

Hakukuwa na chaguzi zilizotengenezwa tayari za kutatua shida, kwa hivyo nililazimika kufanya kila kitu kwa mikono na kichwa changu mwenyewe.

Hebu tuanze na ukweli kwamba kwanza unahitaji kuamua nini cha kutumia, ni rahisi - saraka ya mwisho inapaswa kupatikana kwa watumiaji wote wa kikoa kupitia kivinjari. Jambo la kwanza linalokuja akilini ni PHP kwa kushirikiana na ldap, na tutazitumia. Ninaona faida kubwa ya kutumia PHP kuwa unyenyekevu wake - msimamizi yeyote wa mfumo aliye na uelewa mdogo ataweza kufanya mabadiliko muhimu kwa kanuni, ikiwa ni lazima, bila matatizo hasa.

Kwa hiyo, hebu tuanze. Kwanza, hebu tuweke vigezo vya kuunganisha kwenye kikoa:

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

Hoja inayofuata ni kuamua ni OU gani tutatafuta watumiaji. Tutafanya hivi kwa kukatiza maadili kutoka $_GET['place']. Kwa mfano, ikiwa mtumiaji anaenda kwa anwani server/index.php?place=kwanza, kisha kutofautiana $mahali itapewa thamani kwanza.

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

Inaweza kubadilika hati ya $ inahitajika ili kuhifadhi thamani - iwe tumefafanua OU ambayo tutatafuta watumiaji au la. Ikiwa hakuna ulinganifu ulioorodheshwa katika "switch-case", basi $doscript=false, sehemu kuu ya hati haitatekelezwa, na ukurasa wa mwanzo "main_table.html" utaonyeshwa (Nitakuambia kuhusu mwisho kabisa).

Ikiwa tumefafanua OU, basi tunaendelea kwa vitendo zaidi: tunaanza kuchora ukurasa wa saraka kwa mtumiaji:

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

Tunajumuisha mitindo kwa mwonekano wa kupendeza zaidi (ndio, inaweza kujumuishwa kama faili ya css, lakini matoleo kadhaa ya IE hayataki kukubali mitindo iliyowekwa kwa njia hii, kwa hivyo lazima uandike moja kwa moja kwenye hati):

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

Tumemaliza na mitindo, sasa tunaandika kichwa cha kichupo na kuchora kiunga rahisi cha kurudi kwenye ukurasa kuu:

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

Tunafafanua vichungi vya utafutaji kulingana na AD na kupata data kuhusu 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

Ifuatayo, tunatengeneza sehemu ya juu ya ukurasa:

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

Ifuatayo, tunapokea na kuchakata data ya mtumiaji kwa kitanzi, huku ili kuficha baadhi ya akaunti (kwa mfano, huduma), tunaingiza tu "ficha" katika sehemu ya "chumba" katika maelezo ya mtumiaji katika AD, watumiaji kama hao hawatawekwa. inavyoonyeshwa kwenye saraka:

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

Kwa njia, ikiwa unahitaji kupata thamani ya sifa nyingine, basi kumbuka (hii ni muhimu):
katika ombi tunapitisha jina la sifa herufi ndogo barua, vinginevyo haitafanya kazi.

Na ingiza data iliyopokelewa kwenye jedwali:

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

Ifuatayo, tunafunga muunganisho wa ldap, au kuonyesha ujumbe kuhusu kutowezekana kwa kuunganishwa kwa seva:

ldap_close($ds); 
} 
else echo "<h4>Unable to connect to LDAP server</h4>"; 
echo '<br><br><br></body></html>';}

Faili "main_table.html" kutoka ndani ni ukurasa rahisi wa html wenye viungo, na inaonekana kitu kama hiki:

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

Ikiwa nambari yangu itasaidia mtu yeyote, nitafurahi, itumie!

Unaweza pia kuihariri kwa uhuru kama unavyotaka (kuboresha / mbaya zaidi) na kuisambaza kwa njia yoyote.

Asante!

Chanzo: mapenzi.com

Kuongeza maoni