Kupanga chikwatu cha adilesi ya WEB PHP + LDAP

Zidachitika kuti kampeni yayikulu (yochepa) inali ndi maofesi ambiri akutali okhala ndi ogwiritsa ntchito ambiri. Maofesi onse amalumikizidwa mu netiweki imodzi yokhala ndi domain wamba, ofesi iliyonse idafotokozedwa mu Active Directory (pambuyo pake amatchedwa AD) ngati Organisation Unit (OU), momwe ogwiritsa ntchito adalengedwa kale.

Zinali zofunikira kupatsa ogwiritsa ntchito mwayi wopeza mwachangu komanso mosavutikira zidziwitso za wogwira ntchito wofunikira kuchokera ku AD, ndi oyang'anira machitidwe aulere kuchokera pachizoloŵezi chokonza fayilo yolemba yomwe idasewera gawo la bukhu la adilesi.

Panalibe njira zomwe zakonzedwa kale zothetsera vutoli, kotero ndimayenera kuchita zonse ndi manja anga ndi mutu.

Tiyeni tiyambe ndi mfundo yakuti choyamba muyenera kusankha zomwe mungagwiritse ntchito, ndizosavuta - chikwatu chomaliza chiyenera kupezeka kwa onse ogwiritsira ntchito dera kudzera pa msakatuli. Chinthu choyamba chomwe chimabwera m'maganizo ndi PHP molumikizana ndi ldap, ndipo tidzawagwiritsa ntchito. Ndimawona mwayi waukulu wogwiritsa ntchito PHP kukhala kuphweka kwake - woyang'anira dongosolo aliyense womvetsa ngakhale pang'ono adzatha kusintha zofunikira pa code, ngati kuli kofunikira, popanda kusokoneza makamaka.

Kotero, tiyeni tiyambe. Choyamba, tiyeni tiyike magawo olumikizira ku domain:

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

Mfundo yotsatira ndikuzindikira kuti ndi OU iti yomwe tidzasaka ogwiritsa ntchito. Tichita izi potengera zinthu kuchokera ku $_GET['malo']. Mwachitsanzo, ngati wosuta apita ku adilesi seva/index.php?place=choyamba, ndiye kusintha $malo adzapatsidwa mtengo choyamba.

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

Zosiyanasiyana $doscript ndizofunikira kuti tisunge mtengo - kaya tafotokozera OU momwe tidzasaka ogwiritsa ntchito kapena ayi. Ngati palibe machesi omwe adalembedwa mu "switch-case", ndiye $doscript=false, gawo lalikulu la script silidzachitidwa, ndipo tsamba loyambira "main_table.html" liwonetsedwa (ndikuwuzani za pamapeto pake).

Ngati tafotokoza za OU, ndiye kuti tipitiliza kuchitapo kanthu: timayamba kujambula tsamba lachikwatu kwa wogwiritsa ntchito:

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

Timaphatikiza masitayelo kuti awoneke bwino (inde, amatha kuphatikizidwa ngati fayilo ya css, koma mitundu ina ya IE safuna kuvomereza masitayelo okhazikitsidwa motere, ndiye muyenera kuwalemba mwachindunji mu 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>

Tatha ndi masitaelo, tsopano tikulemba mutu wa tabu ndikujambula ulalo wosavuta kuti tibwerere patsamba lalikulu:

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

Timatanthauzira zosefera zosaka ndi AD ndikupeza zambiri za 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

Kenako timapanga pamwamba pa tsamba:

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

Kenako, timalandira ndikusintha zidziwitso za ogwiritsa ntchito pang'onopang'ono, pomwe kuti tibise maakaunti ena (mwachitsanzo, ntchito), timangolowetsa "kubisala" mugawo la "chipinda" muzambiri za ogwiritsa ntchito mu AD, ogwiritsa ntchito oterowo sadzakhala. kuwonetsedwa mu chikwatu:

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

Mwa njira, ngati mukufuna kupeza mtengo wa chikhalidwe china, kumbukirani (izi ndizofunikira):
mu pempho tipereka dzina lachidziwitso zilembo zazing'ono makalata, apo ayi sizingagwire ntchito.

Ndipo ikani zomwe mwalandira patebulo:

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

Kenako, timatseka kulumikizana kwa ldap, kapena kuwonetsa uthenga wovuta kulumikiza ku seva:

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

Fayilo "main_table.html" mkati ndi tsamba losavuta la html lomwe lili ndi maulalo, ndipo limawoneka motere:

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

Ngati code yanga ithandiza aliyense, ndidzakhala wokondwa, igwiritseni ntchito!

Mukhozanso kusintha mwaufulu momwe mukufunira (kusintha / kuipiraipira) ndikugawa mwanjira iliyonse.

Zikomo chifukwa cha chidwi chanu!

Source: www.habr.com

Kuwonjezera ndemanga