PHP + LDAP ವೆಬ್ ವಿಳಾಸ ಡೈರೆಕ್ಟರಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ

(ತುಲನಾತ್ಮಕವಾಗಿ) ದೊಡ್ಡ ಪ್ರಚಾರವು ಯೋಗ್ಯ ಸಂಖ್ಯೆಯ ಬಳಕೆದಾರರೊಂದಿಗೆ ಅನೇಕ ದೂರಸ್ಥ ಕಚೇರಿಗಳನ್ನು ಹೊಂದಿತ್ತು. ಎಲ್ಲಾ ಕಛೇರಿಗಳು ಸಾಮಾನ್ಯ ಡೊಮೇನ್‌ನೊಂದಿಗೆ ಒಂದು ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿವೆ, ಪ್ರತಿ ಕಛೇರಿಯನ್ನು ಸಕ್ರಿಯ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ (ಇನ್ನು ಮುಂದೆ AD ಎಂದು ಉಲ್ಲೇಖಿಸಲಾಗುತ್ತದೆ) ಸಂಘಟನೆಯ ಘಟಕ (OU) ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ, ಇದರಲ್ಲಿ ಬಳಕೆದಾರರನ್ನು ಈಗಾಗಲೇ ರಚಿಸಲಾಗಿದೆ.

AD ಯಿಂದ ಅಗತ್ಯವಿರುವ ಉದ್ಯೋಗಿಯ ಸಂಪರ್ಕ ಮಾಹಿತಿಯನ್ನು ತ್ವರಿತವಾಗಿ ಮತ್ತು ಸಲೀಸಾಗಿ ಪಡೆಯಲು ಬಳಕೆದಾರರಿಗೆ ಅವಕಾಶವನ್ನು ನೀಡುವುದು ಅಗತ್ಯವಾಗಿತ್ತು ಮತ್ತು ವಿಳಾಸ ಪುಸ್ತಕದ ಪಾತ್ರವನ್ನು ವಹಿಸುವ ಪಠ್ಯ ಫೈಲ್ ಅನ್ನು ಸಂಪಾದಿಸುವ ದಿನಚರಿಯಿಂದ ಮುಕ್ತ ಸಿಸ್ಟಮ್ ನಿರ್ವಾಹಕರು.

ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಯಾವುದೇ ಸಿದ್ಧ ಸೂಕ್ತವಾದ ಆಯ್ಕೆಗಳಿಲ್ಲ, ಆದ್ದರಿಂದ ನಾನು ಎಲ್ಲವನ್ನೂ ನನ್ನ ಸ್ವಂತ ಕೈಗಳಿಂದ ಮತ್ತು ತಲೆಯಿಂದ ಮಾಡಬೇಕಾಗಿತ್ತು.

ಮೊದಲು ನೀವು ಏನು ಬಳಸಬೇಕೆಂದು ನಿರ್ಧರಿಸಬೇಕು ಎಂಬ ಅಂಶದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸೋಣ, ಇದು ಸರಳವಾಗಿದೆ - ಅಂತಿಮ ಡೈರೆಕ್ಟರಿಯು ಬ್ರೌಸರ್ ಮೂಲಕ ಡೊಮೇನ್‌ನ ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿರಬೇಕು. ಮನಸ್ಸಿಗೆ ಬರುವ ಮೊದಲ ವಿಷಯವೆಂದರೆ ldap ಜೊತೆಯಲ್ಲಿ PHP, ಮತ್ತು ನಾವು ಅವುಗಳನ್ನು ಬಳಸುತ್ತೇವೆ. PHP ಅನ್ನು ಅದರ ಸಾಪೇಕ್ಷ ಸರಳತೆ ಎಂದು ನಾನು ಪರಿಗಣಿಸುತ್ತೇನೆ - ಸ್ವಲ್ಪ ತಿಳುವಳಿಕೆಯನ್ನು ಹೊಂದಿರುವ ಯಾವುದೇ ಸಿಸ್ಟಮ್ ನಿರ್ವಾಹಕರು ಅಗತ್ಯವಿದ್ದಲ್ಲಿ, ನಿರ್ದಿಷ್ಟವಾಗಿ ಒತ್ತಡವಿಲ್ಲದೆಯೇ ಕೋಡ್‌ಗೆ ಅಗತ್ಯವಾದ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.

ಆದ್ದರಿಂದ, ಪ್ರಾರಂಭಿಸೋಣ. ಮೊದಲಿಗೆ, ಡೊಮೇನ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ನಿಯತಾಂಕಗಳನ್ನು ಹೊಂದಿಸೋಣ:

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

ಯಾವ OU ನಲ್ಲಿ ನಾವು ಬಳಕೆದಾರರನ್ನು ಹುಡುಕುತ್ತೇವೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುವುದು ಮುಂದಿನ ಹಂತವಾಗಿದೆ. $_GET['place'] ನಿಂದ ಮೌಲ್ಯಗಳನ್ನು ಪ್ರತಿಬಂಧಿಸುವ ಮೂಲಕ ನಾವು ಇದನ್ನು ಮಾಡುತ್ತೇವೆ. ಉದಾಹರಣೆಗೆ, ಬಳಕೆದಾರರು ವಿಳಾಸಕ್ಕೆ ಹೋದರೆ server/index.php?place=ಪ್ರಥಮ, ನಂತರ ವೇರಿಯಬಲ್ $ಸ್ಥಳ ಮೌಲ್ಯವನ್ನು ನಿಗದಿಪಡಿಸಲಾಗುವುದು ಪ್ರಥಮ.

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

ವೇರಿಯಬಲ್ $ಡಾಸ್ಕ್ರಿಪ್ಟ್ ಮೌಲ್ಯವನ್ನು ಸಂಗ್ರಹಿಸಲು ಅಗತ್ಯವಿದೆ - ನಾವು ಬಳಕೆದಾರರಿಗಾಗಿ ಹುಡುಕುವ OU ಅನ್ನು ನಾವು ವ್ಯಾಖ್ಯಾನಿಸಿದ್ದೇವೆಯೇ ಅಥವಾ ಇಲ್ಲವೇ. "ಸ್ವಿಚ್-ಕೇಸ್" ನಲ್ಲಿ ಯಾವುದೇ ಹೊಂದಾಣಿಕೆಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡದಿದ್ದರೆ, $doscript=false, ಸ್ಕ್ರಿಪ್ಟ್‌ನ ಮುಖ್ಯ ಭಾಗವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ಪ್ರಾರಂಭ ಪುಟ "main_table.html" ಅನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ (ನಾನು ನಿಮಗೆ ಹೇಳುತ್ತೇನೆ ಇದು ಕೊನೆಯಲ್ಲಿ).

ನಾವು OU ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿದರೆ, ನಾವು ಮುಂದಿನ ಕ್ರಿಯೆಗಳಿಗೆ ಮುಂದುವರಿಯುತ್ತೇವೆ: ನಾವು ಬಳಕೆದಾರರಿಗಾಗಿ ಡೈರೆಕ್ಟರಿ ಪುಟವನ್ನು ಸೆಳೆಯಲು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ:

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

ಹೆಚ್ಚು ಆಹ್ಲಾದಕರ ನೋಟಕ್ಕಾಗಿ ನಾವು ಶೈಲಿಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ (ಹೌದು, ಅವುಗಳನ್ನು css ಫೈಲ್‌ನಂತೆ ಸೇರಿಸಬಹುದು, ಆದರೆ IE ಯ ಕೆಲವು ಆವೃತ್ತಿಗಳು ಈ ರೀತಿಯಲ್ಲಿ ಹೊಂದಿಸಲಾದ ಶೈಲಿಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಬಯಸುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ ನೀವು ಅವುಗಳನ್ನು ನೇರವಾಗಿ ಸ್ಕ್ರಿಪ್ಟ್‌ಗೆ ಬರೆಯಬೇಕು):

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

ನಾವು ಶೈಲಿಗಳೊಂದಿಗೆ ಮುಗಿಸಿದ್ದೇವೆ, ಈಗ ನಾವು ಟ್ಯಾಬ್‌ನ ಶೀರ್ಷಿಕೆಯನ್ನು ಬರೆಯುತ್ತೇವೆ ಮತ್ತು ಮುಖ್ಯ ಪುಟಕ್ಕೆ ಹಿಂತಿರುಗಲು ಅನುಕೂಲಕರ ಲಿಂಕ್ ಅನ್ನು ಸೆಳೆಯುತ್ತೇವೆ:

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

ನಾವು AD ಮೂಲಕ ಹುಡುಕಾಟ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತೇವೆ ಮತ್ತು 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

ಮುಂದೆ ನಾವು ಪುಟದ ಮೇಲ್ಭಾಗವನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುತ್ತೇವೆ:

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

ಮುಂದೆ, ನಾವು ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ಲೂಪ್‌ನಲ್ಲಿ ಸ್ವೀಕರಿಸುತ್ತೇವೆ ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತೇವೆ, ಆದರೆ ಕೆಲವು (ಉದಾಹರಣೆಗೆ, ಸೇವೆ) ಖಾತೆಗಳನ್ನು ಮರೆಮಾಡಲು, ನಾವು AD ಯಲ್ಲಿನ ಬಳಕೆದಾರರ ವಿವರಗಳಲ್ಲಿ "ಕೊಠಡಿ" ಕ್ಷೇತ್ರದಲ್ಲಿ "ಮರೆಮಾಡು" ಎಂದು ನಮೂದಿಸುತ್ತೇವೆ, ಅಂತಹ ಬಳಕೆದಾರರು ಇರುವುದಿಲ್ಲ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗಿದೆ:

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

ಮೂಲಕ, ನೀವು ಇನ್ನೊಂದು ಗುಣಲಕ್ಷಣದ ಮೌಲ್ಯವನ್ನು ಪಡೆಯಬೇಕಾದರೆ, ನಂತರ ನೆನಪಿಡಿ (ಇದು ಮುಖ್ಯವಾಗಿದೆ):
ವಿನಂತಿಯಲ್ಲಿ ನಾವು ಗುಣಲಕ್ಷಣದ ಹೆಸರನ್ನು ರವಾನಿಸುತ್ತೇವೆ ಸಣ್ಣ ಅಕ್ಷರ ಅಕ್ಷರಗಳು, ಇಲ್ಲದಿದ್ದರೆ ಅದು ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ.

ಮತ್ತು ಸ್ವೀಕರಿಸಿದ ಡೇಟಾವನ್ನು ಟೇಬಲ್‌ಗೆ ಸೇರಿಸಿ:

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

ಮುಂದೆ, ನಾವು ldap ಸಂಪರ್ಕವನ್ನು ಮುಚ್ಚುತ್ತೇವೆ ಅಥವಾ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಿಸುವ ಅಸಾಧ್ಯತೆಯ ಬಗ್ಗೆ ಸಂದೇಶವನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತೇವೆ:

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

ಒಳಗಿನಿಂದ "main_table.html" ಫೈಲ್ ಲಿಂಕ್‌ಗಳೊಂದಿಗೆ ಸರಳ html ಪುಟವಾಗಿದೆ ಮತ್ತು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

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

ನನ್ನ ಕೋಡ್ ಯಾರಿಗಾದರೂ ಸಹಾಯ ಮಾಡಿದರೆ, ನಾನು ಸಂತೋಷಪಡುತ್ತೇನೆ, ಅದನ್ನು ಬಳಸಿ!

ನೀವು ಬಯಸಿದಂತೆ ನೀವು ಅದನ್ನು ಮುಕ್ತವಾಗಿ ಸಂಪಾದಿಸಬಹುದು (ಸುಧಾರಣೆ/ಕೆಟ್ಟದ್ದು) ಮತ್ತು ಯಾವುದೇ ವಿಧಾನದಿಂದ ಅದನ್ನು ವಿತರಿಸಬಹುದು.

ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಧನ್ಯವಾದಗಳು!

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ