$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>
Источник: здесь
Комментариев нет:
Отправить комментарий