Ukudala uluhlu lweedilesi zeWEBHU PHP + LDAP

Kwenzekile ukuba (ngokomlinganiselo) iphulo elikhulu libe neeofisi ezininzi ezikude ezinenani elifanelekileyo labasebenzisi. Zonke iiofisi ziqhagamshelwe kwinethiwekhi enye kunye ne-domain efanayo, iofisi nganye yachazwa kwi-Active Directory (emva koku kuthiwa yi-AD) njengeYunithi yoMbutho (OU), apho abasebenzisi sele benziwe.

Kwakuyimfuneko ukunika abasebenzisi ithuba lokufumana ngokukhawuleza kunye nomzamo wokufumana ulwazi loqhagamshelwano lomqeshwa ofunekayo kwi-AD, kunye nabalawuli benkqubo yamahhala ukusuka kwindlela yokuhlela ifayile yombhalo edlala indima yencwadi yeedilesi.

Kwakungekho zikhetho zilungele ukucombulula le ngxaki, ngoko ke kwafuneka ndenze yonke into ngezandla zam nangentloko.

Masiqale ngento yokuba okokuqala kufuneka wenze isigqibo malunga nokuba uyisebenzise, ​​​​ilula - incwadi yokugqibela kufuneka ifumaneke kubo bonke abasebenzisi besizinda ngokusebenzisa umkhangeli zincwadi. Into yokuqala efika engqondweni yi-PHP ngokubambisana ne-ldap, kwaye siya kuyisebenzisa. Ndicinga ukuba inzuzo enkulu yokusebenzisa i-PHP ibe yinto elula kakhulu - nawuphi na umlawuli wenkqubo onokuqonda okuncinci uya kukwazi ukwenza utshintsho oluyimfuneko kwikhowudi, ukuba kuyimfuneko, ngaphandle kokunciphisa ngokukodwa.

Ngoko, masiqale. Kuqala, makhe sisete iiparamitha zokuqhagamshela kwidomeyini:

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

Inqaku elilandelayo kukumisela ukuba yeyiphi i-OU esiyakukhangela abasebenzisi. Siza kukwenza oku ngokufumana amaxabiso asuka kwi-$_GET['indawo']. Umzekelo, ukuba umsebenzisi uya kwidilesi umncedisi/index.php?indawo=Ekuqaleni, emva koko ukuguquguquka Indawo ye-$ iyakwabelwa ixabiso Ekuqaleni.

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

Eyahlukileyo $doscript iyafuneka ukugcina ixabiso - nokuba siyichazile iOU apho sizakukhangela abasebenzisi okanye hayi. Ukuba akukho midlalo idweliswe “kwimeko yokutshintsha”, ngoko ke i-$doscript=false, inxalenye ephambili yesikripthi ayisayi kuphunyezwa, kunye nephepha lokuqala elithi “main_table.html” liza kuboniswa (ndiza kukuxelela malunga nalo). ngayo ekugqibeleni).

Ukuba sichazile i-OU, ngoko siqhubela phambili kwizenzo ezingaphaya: siqala ukuzoba uvimba weefayili wephepha lomsebenzisi:

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

Sibandakanya izimbo zenkangeleko ethandeka ngakumbi (ewe, zinokuqukwa njengefayile ye-css, kodwa ezinye iinguqulelo ze-IE azifuni kwamkela izimbo ezibekwe ngolu hlobo, ngoko kufuneka uzibhale ngqo kwiscript):

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

Senziwe ngezitayile, ngoku sibhala isihloko sethebhu kwaye sizoba ikhonkco elifanelekileyo lokubuyela kwiphepha eliphambili:

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

Sichaza izihluzi zokukhangela nge-AD kwaye sifumana idatha malunga ne-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

Okulandelayo siyila umphezulu wephepha:

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

Okulandelayo, sifumana kwaye siqhube idatha yomsebenzisi kwi-loop, ngelixa ukuze sifihle ezinye (umzekelo, inkonzo) iiakhawunti, singena ngokulula "fihla" kwindawo "yegumbi" kwiinkcukacha zomsebenzisi kwi-AD, abasebenzisi abanjalo abayi kuba. iboniswe kuluhlu:

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

Ngendlela, ukuba ufuna ukufumana ixabiso lolunye uphawu, khumbula (oku kubalulekile):
kwisicelo sigqithisa igama lophawu unobumba omncinci iileta, kungenjalo ayiyi kusebenza.

Kwaye faka idatha efunyenweyo kwitafile:

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

Okulandelayo, sivala uxhulumaniso lwe-ldap, okanye sibonise umyalezo malunga nokungenzeki kokudibanisa kumncedisi:

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

Ifayile "main_table.html" evela ngaphakathi liphepha le-html elilula elinamakhonkco, kwaye lijongeka ngolu hlobo:

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

Ukuba ikhowudi yam inceda nabani na, ndiya kuvuya, ndiyisebenzise!

Ungayihlela ngokukhululekileyo njengoko unqwenela (uphucule / umbi) kwaye usasaze ngayo nayiphi na indlela.

Спасиalu

umthombo: www.habr.com

Yongeza izimvo