Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Captcha jak zastosować?
Forum PHP.pl > Forum > Przedszkole
max_mcee
Mam taki kod generowania obrazków:
  1. <?php
  2. /* captcha_image.php */
  3.  
  4. /* Długość hasła */
  5. $pass_length = 4;
  6.  
  7. /* Wymiary obrazu */
  8. $width = 200;
  9. $height = 60;
  10.  
  11. /* Ścieżka do czcionki TTF */
  12. $font_path = dirname(__FILE__);
  13.  
  14.  
  15. /* Tworzy hasło. */
  16. $passwd = "";
  17. $i = 0;
  18. while ($i < $pass_length) {
  19.    $passwd .= chr(rand(97, 122));
  20.    $i++;
  21. }
  22.  
  23. /* Składuje hasło. */
  24. $_SESSION["tt_pass"] = $passwd;
  25.  
  26. /* Uzyskuje listę dostępnych czcionek. */
  27. $fonts = array();
  28.  
  29. if ($handle = opendir($font_path)) {
  30.    while (false !== ($file = readdir($handle))) {
  31.    /* Poszukuje czcionek TTF. */
  32.    if (substr(strtolower($file), -4, 4) == '.ttf') {
  33.        $fonts[] = $font_path . '/' . $file;
  34.    }
  35.    }
  36. }    
  37.  
  38. if (count($fonts) < 1)    {
  39.    die("Nie znaleziono czcionek!");
  40. }
  41.  
  42. /* Nagłówek obrazu: */
  43. header("Content-Type: image/jpeg");
  44. /* Nagłówki przeciwdziałające składowaniu obrazu w pamięci podręcznej: */
  45. header("Expires: Mon, 01 Jul 1998 05:00:00 GMT");
  46. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  47. header("Cache-Control: no-store, no-cache, must-revalidate");
  48. header("Cache-Control: post-check=0, pre-check=0", false);
  49. header("Pragma: no-cache");
  50.  
  51. /* Tworzy obraz. */
  52. $img = imagecreatetruecolor($width, $height);
  53.  
  54. /* Wypełnia tło losowym odcieniem pastelowym. */
  55. $bg = imagecolorallocate($img, rand(210,255), rand(210,255), rand(210,255));
  56. imagefilledrectangle($img, 0,0, $width, $height, $bg);
  57.  
  58. /* Komplikuje tło obrazu, uzupełniając je o różnokolorowe,
  59.    czworokątne figury. */
  60.  
  61. /* Tworzy linie grubości od 10 do 30 pikseli rozciągające się na całym obrazie. */
  62. $right = rand(10, 30);
  63. $left = 0;
  64. while ($left < $width) {
  65.    $poly_points = array(
  66.    $left, 0,                                 /* Lewy, górny narożnik */
  67.        $right, 0,                                /* Prawy, górny narożnik */
  68.        rand($right-25, $right+25), $height,      /* Prawy, dolny narożnik */
  69.        rand($left-15, $left+15), $height);       /* Lewy, dolny narożnik */
  70.    
  71.    /* Tworzy wielokąt, wykorzystując losowe punkty składowane w tablicy. */
  72.    $c = imagecolorallocate($img, rand(210,255), rand(210,255), rand(210,255));
  73.    imagefilledpolygon($img, $poly_points, 4, $c);
  74.    
  75.    /* Zbliża się do prawej krawędzi. */
  76.    $random_amount = rand(10, 30);
  77.    $left += $random_amount;
  78.    $right += $random_amount;
  79. }
  80.  
  81. /* Wybiera podstawowy przedział wartości kolorów dla pionowych i poziomych linii. */
  82. $c_min = rand(120, 185);
  83. $c_max = rand(195, 280);
  84.  
  85. /* Rysuje przypadkowe, pionowe linie na całej szerokości obrazu. */
  86. $left = 0;
  87. while ($left < $width) {
  88.    $right = $left + rand(3, 7);
  89.    $offset = rand(-3, 3);                       /* Przesunięcie decydujące o nachyleniu */
  90.    
  91.    $line_points = array(
  92.        $left, 0,                                /* Lewy, górny narożnik */
  93.        $right, 0,                               /* Prawy, górny narożnik */
  94.        $right + $offset, $height,               /* Prawy, dolny narożnik */
  95.        $left + $offset, $height);               /* Lewy, dolny narożnik */
  96.    
  97.    $pc = imagecolorallocate($img, rand($c_min, $c_max),
  98.                                   rand($c_min, $c_max),
  99.                                   rand($c_min, $c_max));
  100.    imagefilledpolygon($img, $line_points, 4, $pc);
  101.    
  102.    /* Zbliża się do prawej krawędzi. */
  103.    $left += rand(20, 60);
  104. }
  105.  
  106. /* Rysuje przypadkowe, poziome linie na całej wysokości obrazu. */
  107. $top = 0;
  108. while ($top < $height) {
  109.    $bottom = $top + rand(1, 4);
  110.    $offset = rand(-6, 6);                    /* Przesunięcie decydujące o nachyleniu */
  111.    
  112.    $line_points = array(
  113.        0, $top,                              /* Lewy, górny narożnik */
  114.        0, $bottom,                           /* Lewy, dolny narożnik */
  115.        $width, $bottom + $offset,            /* Prawy, dolny narożnik */
  116.        $width, $top + $offset);              /* Prawy, górny narożnik */
  117.    $pc = imagecolorallocate($img, rand($c_min, $c_max),
  118.                   rand($c_min, $c_max),
  119.                   rand($c_min, $c_max));
  120.    imagefilledpolygon($img, $line_points, 4, $pc);
  121.    $top += rand(8, 15);
  122. }
  123.  
  124. /* Określa odległość dzielącą znaki. */
  125. $spacing = $width / (strlen($passwd)+2);
  126.  
  127. /* Początkowa współrzędna pozioma */
  128. $x = $spacing;
  129.  
  130. /* Rysuje poszczególne znaki. */
  131. for ($i = 0; $i < strlen($passwd); $i++) {
  132.    $letter = $passwd[$i];
  133.    $size = rand($height/3, $height/2);
  134.    $rotation = rand(-30, 30);
  135.    
  136.    /* Losowa współrzędna pionowa z przestrzenią na wyższe znaki */
  137.    $y = rand($height * .90, $height - $size - 4);
  138.  
  139.    /* Wybiera losową czcionką. */
  140.    $font = $fonts[array_rand($fonts)];
  141.  
  142.    /* Wybiera kolor dla danej litery. */
  143.    $r = rand(100, 255); $g = rand(100, 255); $b = rand(100, 255);
  144.  
  145.    /* Tworzy kolory samej litery i jej cienia. */
  146.    $color = imagecolorallocate($img, $r, $g, $b);
  147.    $shadow = imagecolorallocate($img, $r/3, $g/3, $b/3);
  148.    
  149.    /* Rysuje kolejno cień litery i samą literę. */
  150.    imagettftext($img, $size, $rotation, $x, $y, $shadow, $font, $letter);
  151.    imagettftext($img, $size, $rotation, $x-1, $y-3, $color, $font, $letter);
  152.  
  153.    /* Przechodzi do kolejnej pozycji na danej kanwie. */
  154.    $x += rand($spacing, $spacing * 1.5);  
  155. }
  156.  
  157. imagejpeg($img);          /* Wysyła gotowy obraz. */
  158. imagedestroy($img);       /* Zwalnia pamięć obrazu. */
  159.  
  160. ?>


oraz taki
  1. <?php
  2.  
  3.  
  4. /* Analizujemy otrzymane hasło. */
  5. if ($_REQUEST["tt_pass"]) {
  6.    if ($_REQUEST["tt_pass"] == $_SESSION["tt_pass"]) {
  7.        echo "Otrzymano prawidłowe hasło.";
  8.    } else {
  9.        echo "Otrzymano nieprawidłowe hasło.";
  10.    }
  11.    exit(0);
  12. }
  13.  
  14. /* Domyślnie wysyłamy formularz w tej formie. */
  15.  
  16. print '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';
  17. ?>
  18.  
  19. Aby kontynuować, wpisz następujące litery:<br />
  20. (Jeśli wyświetlone litery są nieczytelne, odśwież tę stronę)<br />
  21. <img src="captcha.BMP"><br /><br />
  22. Litery: <input name="tt_pass" type="text" size="10" maxlength="10">
  23. <input type="submit">
  24. </form>


jak uruchamiam pierwszy plik to obrazek się generuje, ale jak zrobić, aby był wyświetlany w tym formularzu questionmark.gif
luniak
może zamiast

  1. <?php
  2. <img src="captcha.BMP">
  3. ?>


daj

  1. <?php
  2. <img src="captcha_image.php">
  3. ?>


(o ile masz je w tym samym folderze)
max_mcee
nom śmiga winksmiley.jpg dziękuję bardzo smile.gif
nexis
Zamiast
  1. <?php
  2. $_REQUEST["tt_pass"];
  3. ?>

użyj
  1. <?php
  2. $_POST['tt_pass'];
  3. ?>
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.