суббота, 19 августа 2017 г.

Как вывести фото из AD в браузере (php + ldap)?

 $ldap = ldap_connect($ad_host);

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_bind($ldap, $reader_rdn, $reader_pass); $res = ldap_search($ldap, $base_dn, "($uid_attrib=".$_REQUEST['uid'].")", array('jpegPhoto')); $info = ldap_get_entries($ldap, $res); $photo = $info[0]['jpegphoto'][0]; $img = imagecreatefromstring($photo); header("Content-type: image/jpeg"); imagejpeg($img,NULL,100); lsap_close(ldap);

Источник: здесь

Или

Решил описать решение вывода фотографии из AD (Active Directory) в браузер, т.к. такого не нашел в инете когда потребовалось, поэтому думал как сделать сам, ну и собственно может кому пригодиться.
Предыстория: была поставлена задача сделать адресную книгу фирмы (ФИО, должность, телефон, e-mail) в браузере. С перечисленным проблем не возникло (php ldap), но захотелось добавить фотографии, которые так же находятся в AD у пользователей (параметры jpegPhoto и thumbnail). Погуглив нашел решение на тостере (https://toster.ru/q/95707), но вот беда — не подходит! Долго бился почему, в итоге понял, что таким способом можно вывести на страницу только фото и ничего более. Не вариант.
Думал как дальше и наконец нашел решение! Вывод через тэг , но надо в параметре src указать следующее: «data:image/jpeg;base64,» и далее вывод содержимого параметра jpegPhoto из ldap, но дополнительно закодированное в base64!!!
Вот как это выглядит в коде у меня:

$info = ldap_get_entries($ds, $sr);
...
$photo = base64_encode($info[$i]['jpegphoto'][0]);
echo "<img src=\"data:image/jpeg;base64," . $photo . "\" />";
...

Надеюсь кому то пригодиться.

Ну и полный литинг кода страницы:

<html>
<head>
<meta charset="utf-8"/>
<title>Поиск сотрудников</title>
</head>
<body>
<form>
Кого будем искать:
<br />Фамилия: <input type="text" name="su" />
<br />Имя: <input type="text" name="name" />
<br /><input type="submit" value="Искать" />
</form>
<hr />
<?php

if ($_GET["su"] || $_GET["uname"]) {
$srv = "192.168.1.1";
$uname = "ldap@domen.ru";
$upasswd = "123456";
$dn = "ou=users,dc=domen,dc=ru";
$su = $_GET["su"];
$name = $_GET["uname"];
$search = "(&(sn=$su*)(givenName=$name*))";
$ds=ldap_connect($srv);
if (!$ds) die("error connect to LDAP server $srv");
$r=ldap_bind($ds, $uname, $upasswd);
if (!$r) die("error bind!");
$sr=ldap_search($ds, $dn, iconv("utf-8", "cp1251" ,$search), array('name','title','company','mail','jpegphoto'));
if (!$sr) die("search error!");
echo "Результат поиска:<br />";
echo "Получено записей - " . ldap_count_entries($ds, $sr) . "<br />";
echo "<hr />";
$info = ldap_get_entries($ds, $sr);
for ($i=0; $i<$info["count"]; $i++) {
echo "<b>ФИО:</b> " . iconv("cp1251", "utf-8", $info[$i]["name"][0]) . "<br />";
echo "<b>должность, телефон:</b> " . iconv("cp1251", "utf-8", $info[$i]["title"][0]) . "<br />";
echo "<b>фирма:</b> " . iconv("cp1251", "utf-8", $info[$i]["company"][0]) . "<br />";
echo "<b>email:</b> <a href=\"mailto:" . $info[$i]["mail"][0] . "\">" . $info[$i]["mail"][0] . "</a><br />";
echo "<b>фото: </b>";
$photo = base64_encode($info[$i]['jpegphoto'][0]);
if ($photo != "") echo "<img src=\"data:image/jpeg;base64,".$photo."\" />";
else echo "фотографии нет";
echo "<hr />";
}
ldap_close($ds);
}

?>

</body>
</html>
Источник: здесь

Комментариев нет:

Отправить комментарий