Mamorona lahatahiry adiresy WEB PHP + LDAP

Nitranga izany fa ny fampielezan-kevitra (soavaly) lehibe dia nanana birao lavitra maro misy mpampiasa mendrika. Ny birao rehetra dia mifandray amin'ny tambajotra iray misy sehatra iraisana, ny birao tsirairay dia voafaritra ao amin'ny Active Directory (antsoina hoe AD) ho toy ny Organisation Unit (OU), izay efa namoronana ny mpampiasa.

Tsy maintsy nomena ny mpampiasa ny fahafahana haingana sy mora azo ny fifandraisana amin'ny mpiasa takiana avy amin'ny AD, ary maimaim-poana ny mpitantana ny rafitra avy amin'ny fahazarana amin'ny fanovana rakitra lahatsoratra izay nitana ny anjara asan'ny boky adiresy.

Tsy nisy safidy mety efa vonona ho an'ny famahana ny olana, ka tsy maintsy nanao ny zava-drehetra tamin'ny tanako sy ny lohako aho.

Andeha isika hanomboka amin'ny hoe mila manapa-kevitra aloha ianao hoe inona no hampiasaina, tsotra - ny lahatahiry farany dia tokony ho azon'ny mpampiasa rehetra amin'ny sehatra amin'ny alàlan'ny navigateur. Ny zavatra voalohany tonga ao an-tsaina dia ny PHP miaraka amin'ny ldap, ary hampiasa azy ireo izahay. Heveriko fa ny tombony lehibe amin'ny fampiasana PHP dia ny fahatsorany - ny mpitantana ny rafitra izay manana fahatakarana kely dia afaka manao ny fanovana ilaina amin'ny code, raha ilaina, tsy misy fanerena manokana.

Andeha àry isika hanomboka. Voalohany, andao hametraka ny mari-pamantarana hifandraisana amin'ny sehatra:

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

Ny teboka manaraka dia ny hamaritana hoe aiza ny OU hotadiavinay ho an'ny mpampiasa. Hanao izany isika amin'ny alàlan'ny fisakanana soatoavina avy amin'ny $_GET['toerana']. Ohatra, raha mankany amin'ny adiresy ny mpampiasa server/index.php?place=voalohany, avy eo ny miovaova $toerana homena ny sandany voalohany.

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

Miovaova $doscript ilaina ny fitahirizana ny sandany - na nofaritantsika ny OU izay hikarohana mpampiasa na tsia. Raha tsy misy lalao voatanisa ao amin'ny "switch-case", dia $doscript=false, ny ampahany lehibe amin'ny script dia tsy hotanterahina, ary ny pejy fanombohana "main_table.html" dia haseho (Holazaiko aminao ny momba izany. izany amin'ny farany).

Raha namaritra OU isika, dia miroso amin'ny hetsika fanampiny: manomboka manao sary pejy lahatahiry ho an'ny mpampiasa:

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

Ampidiro ny styles amin'ny endrika mahafinaritra kokoa (eny, azo ampidirina ho rakitra css izy ireo, fa ny dikan-teny sasany amin'ny IE dia tsy te hanaiky ny fomba apetraka amin'izany fomba izany, ka tsy maintsy manoratra azy mivantana ao anaty script ianao):

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

Vita ny styles, manoratra ny lohatenin'ny tabilao izahay ary manao rohy mety hiverenana amin'ny pejy lehibe:

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

Mamaritra sivana fikarohana amin'ny AD izahay ary mahazo angona momba ny 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

Manaraka izany dia mamolavola ny tampon'ny pejy izahay:

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

Manaraka, mandray sy manodina ny angon-drakitra mpampiasa amin'ny loop izahay, raha mba hanafenana ny kaonty sasany (ohatra, serivisy) dia ampidiro fotsiny ny "manafina" ao amin'ny saha "efitrano" ao amin'ny antsipirian'ny mpampiasa ao amin'ny AD, ny mpampiasa toy izany dia tsy ho. aseho ao amin'ny lahatahiry:

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

Raha ny marina, raha mila mahazo ny sandan'ny toetra iray hafa ianao, dia tadidio (zava-dehibe izany):
amin'ny fangatahana dia mandalo ny anaran'ny toetra litera kely taratasy, raha tsy izany dia tsy hahomby.

Ary ampidiro ao anaty tabilao ny angona voaray:

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

Manaraka, manakatona ny fifandraisana ldap isika, na mampiseho hafatra momba ny tsy fahafahana mifandray amin'ny mpizara:

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

Ny rakitra "main_table.html" avy ao anatiny dia pejy html tsotra misy rohy, ary toa izao:

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

Raha manampy olona ny code-ko, dia ho faly aho, ampiasao izany!

Azonao atao koa ny manova azy malalaka araka izay irinao (manatsara / miharatsy) ary mizara azy amin'ny fomba rehetra.

Fidio ny Fiteninao

Source: www.habr.com

Add a comment