Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wygenerowany obrazek nie pokazuje się, gdy jest wczytywany za pomocą <img>
kriszna
post 8.08.2009, 21:21:12
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
wookieb
post 8.08.2009, 21:29:37
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A możesz podać link do tego skryptu?


--------------------
Go to the top of the page
+Quote Post
kriszna
post 8.08.2009, 21:40:45
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


http://www.ecms.ugu.pl/ tu próbuje wczytać obrazek, a http://www.ecms.ugu.pl/inc/captcha.php tu działa.
Go to the top of the page
+Quote Post
Wicepsik
post 8.08.2009, 23:20:10
Post #4





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Spróbuj dać


  1. putenv('GDFONTPATH=inc/fonts/');


--------------------
Go to the top of the page
+Quote Post
kriszna
post 9.08.2009, 09:37:53
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


Nie pomogło. Próbowałem też zmienić ścieżkę w funkcji imagettftext(), ale nie działa. Ma ktoś jeszcze jakiś pomysł?
Go to the top of the page
+Quote Post
zegarek84
post 9.08.2009, 09:54:29
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kriszna
post 9.08.2009, 10:17:50
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


Nie wiem czemu, ale to rozwiązanie u mnie nie działa...
U Ciebie zadziałało na localhoscie na linuksie questionmark.gif
Go to the top of the page
+Quote Post
zegarek84
post 9.08.2009, 10:57:46
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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]...)...

Ten post edytował zegarek84 9.08.2009, 11:08:30


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Wicepsik
post 9.08.2009, 11:00:08
Post #9





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


  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 ?


--------------------
Go to the top of the page
+Quote Post
kriszna
post 10.08.2009, 13:45:30
Post #10





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


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

Ten post edytował kriszna 10.08.2009, 13:45:53
Go to the top of the page
+Quote Post
Unik2psc
post 11.08.2009, 17:08:50
Post #11





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 27.07.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:03