Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySql][jpg] MIME type
Forum PHP.pl > Forum > PHP
hettmix
Witam.

Mam taki kodzik, którego celem jest wyświetlenie obrazka pobieranego z bazy:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. </head>
  4. <img width=160 height=70 border=0 src="../modules/mod_edit_user/users_podpis.php" />
  5. </body>
  6. </html>

Plik users_podpis.php
  1. <?php
  2. header('Content-Type: image/jpeg; charset=UTF-8');
  3.  
  4. require "/volume1/web/Joomla_1.5/connection/connection.php";
  5. include "/volume1/web/Joomla_1.5/joomla-auth-porzadkowe.php";
  6. include "/volume1/web/Joomla_1.5/joomla-config-porzadkowe.php";
  7.  
  8. connection();
  9.  
  10. $interface="admin";
  11. $uzytkownik=JFactory::getUser()->username;
  12.  
  13.  
  14. $res=mysql_query("SELECT podpis from jos_users where username='".$uzytkownik."';") or die('Błąd zapytania select');
  15. $res=mysql_fetch_row($res);
  16. $jpeg=$res[0];
  17.  
  18. if (strlen($jpeg)==0) {
  19. $jpeg = file_get_contents("/volume1/web/Joomla_1.5/modules/mod_edit_user/images/brakpodpisu.jpg");
  20. }
  21.  
  22. header("Content-Disposition: inline; filename=podpis");
  23. print $jpeg;
  24.  
  25. ?>


Konsola JavaScript wyrzuca poniższy błąd:
Resource interpreted as Image but transferred with MIME type text/html: "modules/mod_edit_user/users_podpis.php".
Jak rozgryźć ten problem, by wyświetlić plik *.jpg ?
mortus
Co się znajduje w kolumnie podpis w bazie danych?
hettmix
Cytat(mortus @ 19.12.2012, 20:32:34 ) *
Co się znajduje w kolumnie podpis w bazie danych?

Kolumna 'podpis' to BLOOB zawierający pliki binarne, a konkretnie skany pieczątek w formacie jpg.
mortus
imagecreatefromstring()

Stosowane przez Ciebie rozwiązanie do optymalnych nie należy. Przeważnie takie problemy realizuje się nieco inaczej, tj. w bazie danych umieszcza się adres pliku, który uprzednio uploaduje się na serwer. Niemniej powyżej przedstawiona funkcja powinna załatwić sprawę.
hettmix
Cytat(mortus @ 20.12.2012, 10:03:00 ) *
imagecreatefromstring()

Stosowane przez Ciebie rozwiązanie do optymalnych nie należy. Przeważnie takie problemy realizuje się nieco inaczej, tj. w bazie danych umieszcza się adres pliku, który uprzednio uploaduje się na serwer. Niemniej powyżej przedstawiona funkcja powinna załatwić sprawę.

Oczywiście, można to zrobić w ten sposób o którym piszesz, ale przecież pola blob po coś zostały stworzone. W moim przypadku plików jpg będzie w bazie niezbyt dużo i będą niewielkich rozmiarów.
Poniżej rozwiązanie problemu, może się przyda:
  1.  
  2. header("Pragma: no-cache");
  3. header("Expires: 0");
  4. header("Cache-Control: must-revalidate");
  5.  
  6. require "/volume1/web/Joomla_1.5/connection/connection.php";
  7. include "/volume1/web/Joomla_1.5/joomla-auth-porzadkowe.php";
  8. include "/volume1/web/Joomla_1.5/joomla-config-porzadkowe.php";
  9.  
  10. connection();
  11.  
  12. $user = trim($_GET['user']);
  13.  
  14. $wynik = mysql_query("SELECT * FROM jos_users where username='".$user."';") or die('Błąd zapytania select');
  15. $r = mysql_fetch_assoc($wynik);
  16.  
  17. $content = $r['podpis'];
  18.  
  19. if (strlen($content)==0) {
  20. $content = file_get_contents("/volume1/web/Joomla_1.5/modules/mod_edit_user/images/brakpodpisu.jpg");
  21. }
  22.  
  23. $image = imagecreatefromstring($content);
  24.  
  25. imagejpeg($image, null, 80);
  26. $data = ob_get_contents();

  1. <td rowspan=3 valign=center align=right><a href="edit_bytea.php?user=<?php echo $user;?>">
  2. <?php echo '<img width=160px height=70px src="data:image/jpg;base64,' . base64_encode($data) . '" />';?></a></td>
Sephirus
A wsytarczyły by dać do pierwszego kodu

  1. header('Content-Type:image/jpeg');


smile.gif

charset nie powinien być wtedy deklarowany
hettmix
Cytat(Sephirus @ 20.12.2012, 12:53:50 ) *
A wsytarczyło by dać do pierwszego kodu

  1. header('Content-Type:image/jpeg');


smile.gif

charset nie powinien być wtedy deklarowany

Niestety ale nie wystarczyło - przeglądarka również w tym przypadku zgłaszała błąd:
Resource interpreted as Image but transferred with MIME type text/html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.