Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wygenerowany obrazek nie pokazuje się, gdy jest wczytywany za pomocą <img>
Forum PHP.pl > Forum > PHP
kriszna
Witam.
Robię sobie własny skrypt CAPTCHA i mam problem. Kiedy otworze plik php generujący obrazek:
  1. putenv('GDFONTPATH=fonts/');
  2.  
  3. $pool = '23456789';
  4.  
  5. $str = '';
  6. for ($i = 0; $i < 5; $i++){
  7. $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
  8. }
  9.  
  10. $string = $str;
  11. $_SESSION['captcha'] = $string;
  12.  
  13. $im = imagecreatefromjpeg('images/captcha.jpg');
  14.  
  15. $font_color = imagecolorallocate($im,255,255,255);
  16.  
  17. $x = 20;
  18.  
  19. for($a=0; $a < 7; $a++){
  20. imagettftext($im, 10, 10, 10+($a*20), 20, $font_color, 'fonts/CALIBRIB.ttf', substr($string, $a, 1));
  21. $x += 15;
  22. }
  23.  
  24. header("Content-type: image/gif");
  25. imagegif($im);
  26. imagedestroy($im);

obrazek pokazuje się. Kiedy natomiast wczytuje obrazek za pomocą <img > pojawia się tekst alternatywny. Plik generujący obrazek jest w podkatalogu folderu w którym mam plik z którego wczytuje obrazek.
Problem występuje na hostingu ugu.pl. Na localhoscie działa mi. Robię coś źle, czy wina hostingu?
Pozdrawiam
kriszna
wookieb
A możesz podać link do tego skryptu?
kriszna
http://www.ecms.ugu.pl/ tu próbuje wczytać obrazek, a http://www.ecms.ugu.pl/inc/captcha.php tu działa.
Wicepsik
Spróbuj dać


  1. putenv('GDFONTPATH=inc/fonts/');
kriszna
Nie pomogło. Próbowałem też zmienić ścieżkę w funkcji imagettftext(), ale nie działa. Ma ktoś jeszcze jakiś pomysł?
zegarek84
gdy w kodzie pod firebug'iem zmieniłem w mozilli oraz gdy zmieniłem w kodzie w operze i zastosowałem zmiany na linuxie obrazek mi się pokazał...

zmień ścieżkę obrazka z inc/captcha.php na /inc/captcha.php
kriszna
Nie wiem czemu, ale to rozwiązanie u mnie nie działa...
U Ciebie zadziałało na localhoscie na linuksie questionmark.gif
zegarek84
na początku sprawdzałem gdzie indziej - na Twojej stronie zmieniając kod - ale w sumie wtedy pobierało nowe żądanie - potem na localhoście i też działa - ale zauważyłem jeszcze jedną raczej istotną rzecz...

w puźniejszym momencie żeby szybciej odświeżać pod firebugiem dodawałem parametr get do obrazka który się wyświetlał - ale wyświetlał się jakby za wczasu!!! - tzn. obrazek Twój powinien być zależny od Twojej strony i na nim powinien być ten numer co na stronie, a było na odwrót - po zmienieniu obrazka przyjrzałem się numerowi z tego obrazka po czym odświerzałem stronę i dopiero wtedy ten numer obok obrazka był identyczny a nie było obrazka...

generalnie sesję powinieneś mieć pod html'em a przy obrazku ją sczytywać a u Ciebie jest raczej w drugą stronę i coś gdzieś po drodze zależnie od sesji wywalasz - to u góry co podałeś to nie jest cały kod generujący obrazek ;p...

jeśli już to musisz podać zależności między tymi sesjami a obrazkiem gdyż tutaj coś masz nie tak - i w sumie po co startować sesję na obcej stronie gdzie numer i obrazek jest nie potrzebny?? - przy okazji akurat na zewnętrznych stronach tego obrazka nie powinieneś wyświetlać a jeśli chcesz to nie jeden w pętli mógłby tu Ci obciążyć serwer i do tego limit transferu danych ;p

[edit]
to $_SESSION['captcha'] = $string; ustalaj/definiuj na stronie generującej html a w obrazku sczytuj tą zmienną sesyjną...

po zatym chyba jeszcze czegoś nie pokazałeś.... pozatym na końcu skryptu daj jeszcze exit by mieć pewność że skrypt zostaje od razu zakończony... a nagłówki mógłbyś wysłać jak najwcześniej przed generowaniem obrazka (choć różnicy wielkiej to nie robi - gdzieś jeszcze wysyłasz coby nie keszowała przeglądarka więc choćby stąd wiem że to nie pełny kod [Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0]...)...
Wicepsik
  1. putenv('GDFONTPATH=inc/fonts/');
  2.  
  3. $pool = '23456789';
  4.  
  5. $str = '';
  6. for ($i = 0; $i < 5; $i++){
  7. $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
  8. }
  9.  
  10. $string = $str;
  11. $_SESSION['captcha'] = $string;
  12.  
  13. $im = imagecreatefromjpeg('inc/images/captcha.jpg');
  14.  
  15. $font_color = imagecolorallocate($im,255,255,255);
  16.  
  17. $x = 20;
  18.  
  19. for($a=0; $a < 7; $a++){
  20. imagettftext($im, 10, 10, 10+($a*20), 20, $font_color, 'inc/fonts/CALIBRIB.ttf', substr($string, $a, 1));
  21. $x += 15;
  22. }
  23.  
  24. header("Content-type: image/gif");
  25. imagegif($im);
  26. imagedestroy($im);


Tak zadziała ?
kriszna
Niestety, nie działa...

EDIT:
Problem w połowie rozwiązany... Obrazek nie wyświetla się, gdy użyta jest funkcja putenv(). Nie wiem o co chodzi, sprawdzałem różne ścieżki (fonts/, inc/fonts/, /inc/fonts/) ale wciąż nie działa. Mógłbym zrezygnować z różnych czcionek, ale bardzo zależy mi na pochylonym tekście, a nie słyszałem o innej funkcji dającej tą możliwość poza imagettftext(). Znacie jakąś funkcję lub inny pomysł, aby pochylić tekst? Może pobawić się z obróceniem obrazka, dodaniem tekstu, i ponownym obróceniu obrazka do poziomu? Tyle, że to dużo niepotrzebnej zabawy i wydajność też na pewno spadnie...

Pozdrawiam
kriszna
Unik2psc
session_start(); - powinno byc na samym poczatku skryptu - mnieniam ze w pliku config. Ale nie o to mi chodzi, moze glupie pytanie i prosze mnie nie wysmiewac - ale sprobuj podac pelna sciezke do font i obrazka. Bo jesli odplasz .php i ci dziala - a gdy wstawiasz w img (to nasunelo mi sie pytanie - czy masz w jakis dziwny sposob "przyjazne url") - wiem ze glupie pytanie i post moj ale sprobuj.
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.