Ho theha bukana ea aterese ea WEB PHP + LDAP

Ho ile ha etsahala hore phutuho e kholo (e batlang e le) e be le liofisi tse ngata tse hōle tse nang le palo e hlomphehang ea basebelisi. Liofisi tsohle li hokahantsoe le marang-rang a le mong ka domain name, ofisi ka 'ngoe e ne e hlalosoa ho Active Directory (eo hamorao e tla bitsoa AD) e le Mokhatlo oa Mokhatlo (OU), oo basebelisi ba neng ba se ba ntse ba bōpiloe.

Ho ne ho hlokahala ho fa basebelisi monyetla oa ho fumana kapele le ka thata tlhahisoleseling ea mohiruoa ea hlokahalang ho tsoa ho AD, le batsamaisi ba sistimi ea mahala ho tloha mokhoeng oa ho hlophisa faele ea mongolo e neng e bapala karolo ea buka ea liaterese.

Ho ne ho se na mekhoa e loketseng e lokiselitsoeng ho rarolla bothata, kahoo ke ne ke tlameha ho etsa ntho e 'ngoe le e' ngoe ka matsoho a ka le hlooho.

A re qaleng ka taba ea hore pele u lokela ho etsa qeto ea hore na u sebelise eng, e bonolo - buka ea ho qetela e lokela ho fumaneha ho basebelisi bohle ba sebaka seo ka sebatli. Ntho ea pele e tlang kelellong ke PHP hammoho le ldap, 'me re tla e sebelisa. Ke nka monyetla o moholo oa ho sebelisa PHP e le bonolo ba eona - molaoli ofe kapa ofe ea nang le kutloisiso e nyane o tla khona ho etsa liphetoho tse hlokahalang ho khoutu, haeba ho hlokahala, ntle le ho khathatseha ka ho khetheha.

Kahoo, ha re qaleng. Taba ea pele, a re ke re behe liparamente tsa ho hokela domain name:

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

Taba e latelang ke ho fumana hore na re tla batla basebelisi ho OU ho efe. Re tla etsa sena ka ho kenyelletsa boleng ho tsoa ho $_GET['sebaka']. Mohlala, haeba mosebelisi a ea atereseng seva/index.php?place=ea pele, ebe ho fetoha $sebaka e tla abeloa boleng ea pele.

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

E fapaneng $doscript hoa hlokahala ho boloka boleng - ho sa tsotellehe hore na re hlalositse OU eo re tla batla basebelisi ho eona kapa che. Haeba ho se na lipapali tse thathamisitsoeng ho "switch-case", joale $doscript=false, karolo e kholo ea script e ke ke ea etsoa, ​​​​'me leqephe la ho qala "main_table.html" le tla hlahisoa (ke tla u bolella yona qetellong).

Haeba re hlalositse OU, joale re tsoela pele ka liketso tse ling: re qala ho taka leqephe la lenane la mosebedisi:

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

Re kenyelletsa mekhoa bakeng sa ponahalo e ntle haholoanyane (e, e ka kenyelletsoa e le faele ea css, empa mefuta e meng ea IE ha e batle ho amohela mekhoa e behiloeng ka tsela ena, kahoo u tlameha ho e ngola ka ho toba 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>

Re qetile ka setaele, joale re ngola sehlooho sa tab ebe re hula sehokelo se loketseng ho khutlela leqepheng la sehlooho:

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

Re hlalosa lihloela tsa patlo ka AD mme re fumana lintlha ka 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

E latelang re rala bokaholimo ba leqephe:

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

Ka mor'a moo, re amohela le ho sebetsana le data ea mosebedisi ka loop, ha re ntse re pata tse ling (mohlala, tšebeletso) litlaleho, re kenya "pata" tšimong ea "kamore" ho lintlha tsa mosebedisi ho AD, basebelisi ba joalo ba ke ke ba e-ba teng. e hlahang bukeng:

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

Ka tsela, haeba u hloka ho fumana boleng ba tšobotsi e 'ngoe, hopola (sena ke sa bohlokoa):
ka kopo re fetisa lebitso la semelo litlhaku tse nyane mangolo, ho seng joalo e ke ke ea sebetsa.

Ebe u kenya data e amohetsoeng tafoleng:

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

Ka mor'a moo, re koala khokahano ea ldap, kapa re bonts'a molaetsa mabapi le ho se khonehe ho hokela ho seva:

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

Faele "main_table.html" e ka hare ke leqephe le bonolo la html le nang le likhokahano, 'me e shebahala tjena:

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

Haeba khoutu ea ka e thusa mang kapa mang, ke tla thaba, e sebelise!

U ka boela ua e hlophisa ka bolokolohi kamoo u lakatsang kateng (ho ntlafatsa / hobe le ho feta) le ho e aba ka mekhoa efe kapa efe.

Kea le leboha ka tlhokomelo ea hau!

Source: www.habr.com

Eketsa ka tlhaloso