ื™ืฆื™ืจืช ืกืคืจื™ื™ืช ื›ืชื•ื‘ื•ืช ืื™ื ื˜ืจื ื˜ PHP + LDAP

ื›ืš ืงืจื” ืฉื‘ืงืžืคื™ื™ืŸ ื’ื“ื•ืœ (ื™ื—ืกื™ืช) ื”ื™ื• ื”ืจื‘ื” ืžืฉืจื“ื™ื ืžืจื•ื—ืงื™ื ืขื ืžืกืคืจ ื”ื’ื•ืŸ ืฉืœ ืžืฉืชืžืฉื™ื. ื›ืœ ื”ืžืฉืจื“ื™ื ืžื—ื•ื‘ืจื™ื ืœืจืฉืช ืื—ืช ืขื ื“ื•ืžื™ื™ืŸ ืžืฉื•ืชืฃ, ื›ืœ ืžืฉืจื“ ื”ื•ื’ื“ืจ ื‘-Active Directory (ืœื”ืœืŸ AD) ื›ื™ื—ื™ื“ื” ืืจื’ื•ื ื™ืช (OU), ื‘ื” ื›ื‘ืจ ื ื•ืฆืจื• ืžืฉืชืžืฉื™ื.

ื”ื™ื” ืฆื•ืจืš ืœืชืช ืœืžืฉืชืžืฉื™ื ืืคืฉืจื•ืช ืœื”ืฉื™ื’ ื‘ืžื”ื™ืจื•ืช ื•ืœืœื ืžืืžืฅ ืืช ืคืจื˜ื™ ื”ืงืฉืจ ืฉืœ ื”ืขื•ื‘ื“ ื”ื ื“ืจืฉ ืž-AD, ื•ืœืฉื—ืจืจ ืืช ืžื ื”ืœื™ ื”ืžืขืจื›ืช ืžืฉื’ืจืช ืขืจื™ื›ืช ืงื•ื‘ืฅ ื˜ืงืกื˜ ืฉืžื™ืœื ืชืคืงื™ื“ ืฉืœ ืคื ืงืก ื›ืชื•ื‘ื•ืช.

ืœื ื”ื™ื• ืืคืฉืจื•ื™ื•ืช ืžืชืื™ืžื•ืช ืžื•ื›ื ื•ืช ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื”, ืื– ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืขืฉื•ืช ื”ื›ืœ ื‘ืžื• ื™ื“ื™ ื•ื‘ืจืืฉ.

ื ืชื—ื™ืœ ืžื–ื” ืฉืงื•ื“ื ื›ืœ ืฆืจื™ืš ืœื”ื—ืœื™ื˜ ื‘ืžื” ืœื”ืฉืชืžืฉ, ื–ื” ืคืฉื•ื˜ - ื”ืกืคืจื™ื™ื” ื”ืกื•ืคื™ืช ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื–ืžื™ื ื” ืœื›ืœ ืžืฉืชืžืฉื™ ื”ื“ื•ืžื™ื™ืŸ ื“ืจืš ื“ืคื“ืคืŸ. ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืขื•ืœื” ื‘ืจืืฉ ื”ื•ื PHP ื‘ืฉื™ืœื•ื‘ ืขื ldap, ื•ืื ื• ื ืฉืชืžืฉ ื‘ื”ื. ืื ื™ ืžื—ืฉื™ื‘ ืืช ื”ื™ืชืจื•ืŸ ื”ื’ื“ื•ืœ ื‘ืฉื™ืžื•ืฉ ื‘-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";

ืžืฉืชื ื” $doscript ื“ืจื•ืฉ ืœืื—ืกื•ืŸ ื”ืขืจืš - ื‘ื™ืŸ ืื ื”ื’ื“ืจื ื• ืืช ื”-OU ื‘ื• ื ื—ืคืฉ ืžืฉืชืžืฉื™ื ืื• ืœื. ืื ืื™ืŸ ื”ืชืืžื•ืช ืจืฉื•ืžื•ืช ื‘-"switch-case", ืื– $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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”