Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][GD]Captcha - co z tym jest?
Forum PHP.pl > Forum > PHP
kasior
Witajcie. Mam coś takiego:

formularz w pliku message.tpl a w nim linijka:

  1. <img src="lib/core/class.CaptchaSecurityImages.php" />


za działanie formularza odpowiada plik message.php, w którym jest odpowiednia regułka porównująca kod captcha z sesji i kod wpisany w formularzu.

problem jest tego typu, że niby wszystko działa ale kiedy wywołam

  1. print_r($_SESSION);


w pliku message.php to otrzymuję zupełnie co innego niż jest ustawiane w class.CaptchaSecurityImages.php , no chyba,ze w ogóle tam nic nie ustawia, ale w takim razie powinna nie działać captcha a działa . Ponizej kod class.CaptchaSecurityImages.php :


  1. session_register("security_code");
  2.  
  3. function generateCode($characters) {
  4. /* list all possible characters, similar looking characters and vowels have been removed */
  5. $possible = '23456789';
  6. //$possible = '23456789bcdfghjkmnpqrstvwxyz';
  7. $code = '';
  8. $i = 0;
  9. while ($i < $characters) {
  10. $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
  11. $i++;
  12. }
  13.  
  14. return $code;
  15.  
  16.  
  17. }
  18.  
  19. function CaptchaSecurityImages($width='120',$height='40',$characters='6') {
  20. $font = $_SERVER["DOCUMENT_ROOT"].'/lib/fonts/monofont.ttf';
  21. /* font size will be 75% of the image height */
  22.  
  23.  
  24. $_SESSION['security_code'] = generateCode(6);
  25.  
  26. $font_size = $height * 0.75;
  27. $image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream');
  28. /* set the colours */
  29. $background_color = imagecolorallocate($image, 255, 255, 255);
  30. $text_color = imagecolorallocate($image, 20, 40, 100);
  31. $noise_color = imagecolorallocate($image, 100, 120, 180);
  32. /* generate random dots in background */
  33. for( $i=0; $i<($width*$height)/3; $i++ ) {
  34. imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
  35. }
  36. /* generate random lines in background */
  37. for( $i=0; $i<($width*$height)/150; $i++ ) {
  38. imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
  39. }
  40. /* create textbox and add text */
  41. $textbox = imagettfbbox($font_size, 0, $font, $_SESSION['security_code']) or die('Error in imagettfbbox function');
  42. $x = ($width - $textbox[4])/2;
  43. $y = ($height - $textbox[5])/2;
  44. imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $_SESSION['security_code']) or die('Error in imagettftext function');
  45. /* output captcha image to browser */
  46.  
  47. header('Content-Type: image/jpeg');
  48. imagejpeg($image);
  49. imagedestroy($image);
  50.  
  51.  
  52.  
  53.  
  54. }
  55.  
  56.  
  57. CaptchaSecurityImages(120,40,6);


Co robię nie tak?

i co?? nikt nie pomoże?
akostarek
hmm, sprawdziłem przed chwilą na szybko, wszystko działa jak należy,
Kod
array(1) { ["security_code"]=>  string(6) "323398" }
, security_code w $_SESSION będzie "opóźniony" o 1, kod który widzisz na obrazku będzie dostępny w security_code dopiero przy następnym żądaniu (refreshu), czyli
1. obrazek '111' - security_code = nul
refresh
2. obrazek '222' - security_code = 111

itd...

pozdro
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.