Ṣiṣẹda itọsọna adirẹsi WEB kan PHP + LDAP

O ṣẹlẹ pe ipolongo nla kan (ni ibatan) ni ọpọlọpọ awọn ọfiisi latọna jijin pẹlu nọmba to tọ ti awọn olumulo. Gbogbo awọn ọfiisi ti wa ni asopọ si nẹtiwọọki kan pẹlu agbegbe ti o wọpọ, ọfiisi kọọkan ni asọye ni Active Directory (lẹhinna tọka si AD) gẹgẹbi Ẹgbẹ Ẹgbẹ (OU), ninu eyiti awọn olumulo ti ṣẹda tẹlẹ.

O jẹ dandan lati fun awọn olumulo ni aye lati gba alaye olubasọrọ ti oṣiṣẹ ti o nilo lati AD, ati awọn alabojuto eto ọfẹ lati ilana ti ṣiṣatunṣe faili ọrọ kan ti o ṣe ipa ti iwe adirẹsi.

Ko si awọn aṣayan ti o yẹ ti a ti ṣetan fun yiyan iṣoro naa, nitorinaa Mo ni lati ṣe ohun gbogbo pẹlu ọwọ ati ori mi.

Jẹ ki a bẹrẹ pẹlu otitọ pe akọkọ o nilo lati pinnu kini lati lo, o rọrun - itọsọna ikẹhin yẹ ki o wa fun gbogbo awọn olumulo ti aaye nipasẹ ẹrọ aṣawakiri kan. Ohun akọkọ ti o wa si ọkan ni PHP ni apapo pẹlu ldap, ati pe a yoo lo wọn. Mo ro anfani nla ti lilo PHP lati jẹ ayedero ibatan rẹ - eyikeyi oluṣakoso eto pẹlu paapaa oye diẹ yoo ni anfani lati ṣe awọn ayipada pataki si koodu naa, ti o ba jẹ dandan, laisi wahala pataki.

Nitorinaa, jẹ ki a bẹrẹ. Ni akọkọ, jẹ ki a ṣeto awọn paramita fun sisopọ si agbegbe naa:

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

Ojuami ti o tẹle ni lati pinnu ninu eyiti OU yoo wa awọn olumulo. A yoo ṣe eyi nipa kikọlu awọn iye lati $_GET['ibi']. Fun apẹẹrẹ, ti olumulo ba lọ si adirẹsi naa olupin/index.php?ibi=akọkọ, lẹhinna oniyipada ibi $ yoo wa ni sọtọ a iye akọkọ.

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

Oniyipada $doscript nilo lati tọju iye naa - boya a ti ṣalaye OU ninu eyiti a yoo wa awọn olumulo tabi rara. Ti ko ba si awọn ere-kere ti a ṣe akojọ si ni “switch-case”, lẹhinna $doscript=false, apakan akọkọ ti iwe afọwọkọ naa ko ni ṣiṣẹ, ati pe oju-iwe ibẹrẹ “main_table.html” yoo han (Emi yoo sọ fun ọ nipa rẹ. o ni opin pupọ).

Ti a ba ti ṣalaye OU kan, lẹhinna a tẹsiwaju si awọn iṣe siwaju: a bẹrẹ lati fa oju-iwe itọsọna kan fun olumulo:

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

A pẹlu awọn aza fun irisi idunnu diẹ sii (bẹẹni, wọn le wa pẹlu faili css kan, ṣugbọn diẹ ninu awọn ẹya IE ko fẹ lati gba awọn aza ti a ṣeto ni ọna yii, nitorinaa o ni lati kọ wọn taara sinu iwe afọwọkọ):

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

A ti ṣe pẹlu awọn aza, ni bayi a kọ akọle taabu ati fa ọna asopọ irọrun lati pada si oju-iwe akọkọ:

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

A ṣe alaye awọn asẹ wiwa nipasẹ AD ati gba data nipa 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

Nigbamii ti a ṣe apẹrẹ oke ti oju-iwe naa:

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

Nigbamii, a gba ati ṣe ilana data olumulo ni lupu kan, lakoko ti o le tọju diẹ ninu awọn iroyin (fun apẹẹrẹ, iṣẹ), a tẹ “fipamọ” ni aaye “yara” ni awọn alaye olumulo ni AD, iru awọn olumulo kii yoo jẹ. han ninu iwe ilana:

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

Nipa ọna, ti o ba nilo lati gba iye ti abuda miiran, lẹhinna ranti (eyi ṣe pataki):
ninu ibeere ti a kọja orukọ abuda naa kekere awọn lẹta, bibẹẹkọ kii yoo ṣiṣẹ.

Ki o si fi data ti o gba sinu tabili:

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

Nigbamii ti, a tii asopọ ldap, tabi ṣafihan ifiranṣẹ kan nipa aiṣeeṣe asopọ si olupin naa:

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

Faili "main_table.html" lati inu jẹ oju-iwe html ti o rọrun pẹlu awọn ọna asopọ, o si dabi iru eyi:

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

Ti koodu mi ba ṣe iranlọwọ fun ẹnikẹni, Emi yoo dun, lo!

O tun le ṣe atunṣe larọwọto bi o ṣe fẹ (imudara / buru) ki o pin kaakiri ni ọna eyikeyi.

Ṣayẹwo bayi!

orisun: www.habr.com

Fi ọrọìwòye kun