[PHP] Поиск по LDAP в браузере

LDAP
Еще один скрипт поиска по LDAP с любого компьютера в сети. Скрипт написан на PHP. Не стал прикручивать в выдаче результата красивое оформление, если потребуется, его можно взять из доработанной версии этого же скрипта, который я выкладывал вчера.
А этот скрипт в браузере выглядит примерно так:
Форма поиска

И выдача результата


Текст скрипта
<?php

$LDAP_BINDDN = "user@domain";
$LDAP_PASS = "*****";
$LDAP_BASE_DN = "DC=orgname,DC=local";

function ConnectToServer()
{
	$LDAP_SERVER = "192.168.0.1";
	$LDAP_PORT = "389";
        $ds=ldap_connect($LDAP_SERVER, $LDAP_PORT);
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
        return $ds;
}

    print "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'><html><head><title>Поиск по справочнику</title>
	<style type='text/css'>
	*{font-size:100.01%;margin:0}
	body{font:.8em Arial,sans-serif;background:#fff}
	body,a{color:#222}
	a:hover{color:#f00!important}
	table{width:100%;height:100%}
	table table{align:center;width:65%;max-width:1000px;min-width:300px;margin:auto}
	table table td{padding:.25em}
	#text,#text input,.b-text{font:100% Arial,sans-serif;width:100%}
	p{padding:5em 2.2em 13px}
	body,ul,li{padding:0;list-style:none}
	</style></head><body>";

$text = $_POST['text'];
if ($text != "") {

$ds=ConnectToServer();
$ldapbind = ldap_bind($ds, $LDAP_BINDDN , $LDAP_PASS);

if ($ldapbind) {

    $filter = "(&(displayname=$text*)(objectClass=top)(objectClass=user)(objectClass=organizationalPerson)(objectClass=person)(mail=*))";
    $sr=ldap_search($ds, $LDAP_BASE_DN, $filter, array("displayname", "mail", "telephonenumber"));
    $info = ldap_get_entries($ds, $sr);
    
    print "
	<table>
	<tbody>
	<tr><td>  


	<TABLE BORDER=1>  <CAPTION>Электронные адреса пользователей домена</CAPTION>";

    print "<TR>";
    print "<TH> Полное имя пользователя </TH>";
    print "<TH> E-mail пользователя </TH>";
    print "<TH> Телефон</TH>";
    print "</TR>";

    for($i=0; $i<$info["count"]; $i++) {
        print "<TR>";
        print "<TD>" . $info[$i]["displayname"][0] . " </TD>";
        print "<TD> <a href='mailto:" . $info[$i]["mail"][0] . "'>" . $info[$i]["mail"][0] . "</a> </TD>";
        print "<TD>" . $info[$i]["telephonenumber"][0] . " </TD>";
        print "</TR>";
    }

    print"</TR></TABLE> <a href='index.php'>Вернутся в начало</a>
	</td>
	</tr>
	</tbody>	</table>	
";
}
ldap_close($ds);
}
else
{
 print " <form name='test' id='test' method='post' >
	<table>
	<tbody>
	<tr><td>
	<table cellpadding='0' cellspacing='0'>
	<tbody>
	<tr>
	<td align='right' width='200px'>Поиск по справочнику </td>
	<td><input id='text' name='text' size='20' maxlength='400' autofocus></td>
	<td width='150px'> <input value='Найти' type='submit'></td>
	</tr>
	</tbody>	</table>	
	</td>
	</tr>
	</tbody>	</table>	
	</form>
";
}
print"</body></html>";
?>

4 комментария

avatar
Кстати, есть отличная адресная книжка на PHP — называется Contagged. По сути это готовый движок для адресной книги организации любого масштаба, со всеми возможными фичами, который допиливать — поверьте мне, человеку далёкому от PHP, — реально одно удовольствие! Для устройства адресной книги он идеален и с точки зрения удобства заточки чужого кода под собственные нужды, и с точки зрения той, что сам по себе интерфейс приложения настолько удачный, что менять его даже у меня рука не поднялась.
Я немного доработал contagged, чтобы он не столь интенсивно читал из LDAP, но думаю с нормальным знанием PHP и в особенности JavaScript из него можно сделать вообще «Конкорд». Если интересны мои доработки к стандартному движку Contagged, могу выложить как-нибудь. Жаль только здесь вроде нельзя прикпреплять файлы :)
avatar
Очень интересно посмотреть! Насчет файлов согласен, беда конечно. Просто движок стандартными средствами не позволяет этого делать. Есть модуль, но он стоит 10$. Пока можно только через фтп выкладывать. Думаю купить модуль все таки, потому что уже не первый раз просят такую фичу :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.