Avatar billede Mik2000 Professor
20. august 2010 - 13:36 Der er 6 kommentarer og
1 løsning

CAPTCHA

Hej

Jeg har forsøgt at lave en captcha, men den har et problem med at headers allready sent, og viser kun en masse tegn og ikke et billede

Kan nogle af jer hjælpe med hvad der er galt.
Jeg skal helst have den liggende som en funktion

<?
function make_captcha($captcha_width, $captcha_heigth, $pass_phrase,$font_size){
    // Opretter billede
    $img = imagecreatetruecolor($captcha_width, $captcha_heigth);
   
    // sætter farver
    $bg_color = imagecolorallocate($img, 255, 255, 255);
    $text_color = imagecolorallocate($img, 15, 15, 15);
    $graphic_color = imagecolorallocate($img, 200, 200, 200);
   
    // Laver baggrundsfarve
    // imagefilledrectangle($img, 0, 0, $captcha_width, $captcha_heigth, $bg_color);
   
    // Danner noget baggrundsstøj i lyse farver
    for($i=0;$i<($captcha_width*$captcha_heigth);$i++) {
        $color = imagecolorallocate($img, mt_rand(155, 255), mt_rand(155, 255), mt_rand(155, 255));
                       
        imagesetpixel($img, ($x - 1), $y, $color);
        $x += 1;
        if($x > $captcha_width) {
            $y += 1;
            $x = 1;
        }
    }
   
    // Gør at den kan finde fonten
    putenv('GDFONTPATH=' . realpath('.'));
   
    // Beregner placering i højden
    $middle1 = $captcha_heigth - $font_size;
    $middle2 = $middle1 / 2;
   
    // Laver teksten
    imagettftext($img, $font_size, mt_rand(-2, 2), 5, $captcha_heigth - $middle2, $text_color, 'verdana.ttf', $pass_phrase);
   
    // Danner nogle prikker
    for($i=0; $i < 50; $i++) {
        imagesetpixel($img, rand() % $captcha_width, rand() % $captcha_heigth, $graphic_color);
    }

    // Danner nogle streger
    for ($i=0; $i < 3; $i++) {
        imageline($img, 0, rand() % $captcha_heigth, $captcha_width, rand() % $captcha_heigth, $graphic_color);
    }
   
    // Sender billedet via header
    header("Content-type; image/png");
    imagepng($img);
   
    // Rydder op
    imagedestroy($img);
}

function generate_text($count) {
    // Godkendte tegn
    $allowed= array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "2", "3", "4", "5", "6", "7", "8", "9");
   
    // Danner det antal tegn der ønskes inden for arrayet
    for($i=0; $i < $count; $i++) {
        $count_array = count($allowed);
        $text = $text.$allowed[rand(0,$count_array)];
    }
    return $text;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>

<?
$text = generate_text(8);
echo make_captcha(150, 50, $text, 20);
?>
</body>
</html>
Avatar billede majbom Novice
20. august 2010 - 14:02 #1
du skal ikke echo billedet, men vise det som et billede, så i stedet for:

echo make_captcha(150, 50, $text, 20);


skal du gemme php-koden som en fil, og kalde den i et img-tag:

<img src="captcha.php?h=150&w=50&text=$text&q=20">
Avatar billede Mik2000 Professor
20. august 2010 - 14:17 #2
Hej

Problemet er blot, at jeg helst skal have det liggende i en funktion og ikke i en selvstændig fil.

Funktionen vil ligge i en fil indeholdende flere funktioner.

Hvad skal jeg så ændre?
Avatar billede majbom Novice
20. august 2010 - 18:40 #3
du kan lave en funktion der skriver den linje som jeg skrev ovenfor, men så skal du stadig have den kode liggende i en seperat fil - kan det bruges?
Avatar billede Mik2000 Professor
21. august 2010 - 01:34 #4
Det skulle helst være sådan at funktionen skulle kunne ligge i en fil med flere funktioner, og så skulle man kunne kalde den efter behov.

Det er måske slet ikke muligt?
Avatar billede majbom Novice
21. august 2010 - 06:47 #5
det ved jeg faktisk ikke om man kan.
men jeg kan ikke se problemet i at have den som en fil, bortset fra at der er en fil mere, men det er vel ikke et problem?
Avatar billede Mik2000 Professor
21. august 2010 - 13:52 #6
Det er et struktur problem. Men den anden kendte jeg. Den bruger de også i tuturials. Så spørgsmålet er hvordan den laves som funk
Avatar billede Mik2000 Professor
22. oktober 2010 - 23:30 #7
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester