2013-06-05 17 views
7

Mam skonfigurowany system wyświetlania nazwy, adresu e-mail i numeru telefonu wszystkich osób z Active Directory, ale nie mogę uruchomić funkcji "thumbailPhoto".Wyświetl miniaturkęFoto z Active Directory w PHP

Szukałem w Internecie, ale nie byłem w stanie stwierdzić, czy jest to możliwe lub przynajmniej jaki format jest zwracany z Active Directory.

Obecnie używam klasy adldap, więc jeśli jest to możliwe, byłoby to idealne rozwiązanie.

Z góry dziękuję.

Edit:

mogę odzyskać dane w atrybucie thumbnailPhoto i gdybym zrzucić je prosto do przeglądarki uzyskać coś takiego:

ÿØÿàJFIFððÿá PExifII * bh ~ † (2Ži ‡ ¢ XCanonCanon EOS 5D Mark IIIðð2013: 05: 19 17: 35: 31š,àèè "'0230ð' '' ('0'8' '' '' 11''11 0100 ÿÿ ¢ H ¢ P ¢ ¤¤¤¤ 2013: 04: 17 11: 44: 522013: 04: 17 11: 44: 52H¹o @ B¬ † E »dnäWμ: Ì|® (¶ ' HHÿØÿàJFIFÿÛC $' "# (7), 01444'9 = 82 < .342ÿÛC 2 !! 22222222222222222222222222222222222222222222222222ÿÀ-d" ya ÿÄμ} 1AQa "q2'¡ # B ± Arnd $ 3BR, % &„() 456789: CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ „... † ‡ ‰ s '!«»• --~ ™ š ¢ £ ¤ ¥ |§¨ © ª²³'μ¶ · ¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ x ØÙÚáâãäåæçèéêñòóôõö ÷ øùúÿÄ ÿÄμw! 1AQaq "2B'¡ ± A # 3RðbrÑ $ 4A% N &„()

To nie wszystko, ale jest to bardzo długi ciąg, przypuszczam, że jest to jakiś ciąg binarny?

+0

Zakładam, że można odzyskać zawartość „thumbnailPhoto ". Czy przeanalizowałeś, jaki jest format obrazu? – heiglandreas

+0

Dodałem fragment informacji o tym, co zostało zwrócone. Jeśli chodzi o format obrazu, nie wiem, co robi Active Directory wobec obrazu, gdy użytkownik go doda. Nie wiem, czy pozostaje w formacie, który przesyłają, czy jest przetwarzany w jakiś sposób. – Sean

Odpowiedz

15

Wydaje się, że jest to plik JPEG, więc powinieneś być w stanie przesłać te dane wraz z odpowiednim typem MIME do przeglądarki. Powinno być możliwe do wyjścia, że ​​obraz z czymś takim:

<img src="data:image/jpeg;base64,<?php echo base64_encode($imageString); ?>"/> 

Ale może to być również możliwe, aby zapisać pliki z żadnego format obrazu do tego thumbnailPhoto atrybutu. Dlatego chciałbym umieścić zawartość w tymczasowym pliku, który następnie będzie serwowany bezpośrednio z serwera. Będziesz musiał przekazać plik przez finfo, aby uzyskać prawidłowy typ MIME.

Więc można zrobić coś takiego:

$tempFile = tempnam(sys_get_temp_dir(), 'image'); 
file_put_contents($tempFile, $imageString); 
$finfo = new finfo(FILEINFO_MIME_TYPE); 
$mime = explode(';', $finfo->file($tempFile)); 
echo '<img src="data:' . $mime[0] . ';base64,' . base64_encode($imageString) . '"/>'; 
+0

Bardzo dziękuję za to, nieznacznie zmodyfikowałem kod, ponieważ wiedziałem, że to obraz, ale to zdecydowanie rozwiązało mój problem i działa świetnie. – Sean

6

Wypróbuj poniższy kod. Jest to adaptacja powyższej odpowiedzi.

<?php $result = ldap_search($ad , $dn , $filter, $attributes); $aduser = ldap_get_attributes($ad, ldap_first_entry($ad,$result)); ?>

<img src="data:image/jpeg;base64,<?php echo base64_encode($aduser['thumbnailPhoto'][0]); ?>" /> 
0

podczas przechowywania danych fotograficznego do LDAP to znaczy „jpegphoto” atrybut to powinno być wykonane za pomocą kodowanie base64. Odczytywanie atrybutu jest już dekodowane w locie.Stąd chciałbym użyć czegoś mniej zmodyfikowany kod

$tempFile = tempnam(sys_get_temp_dir(), 'image'); 
file_put_contents($tempFile, $imageString); 
$finfo = new finfo(FILEINFO_MIME_TYPE); 
$mime = explode(';', $finfo->file($tempFile)); 
header("Content-Type: $mime"); 
echo $imageString; 

Jest to bezpośredni php obraz zapisu przykład można bezpośrednio używać go pod tagu img tj

<img src="example.php" />