B
Bgag
Guten Abend!
Ich habe ein kleines Problem. Ein Freund von mir brauchte eine Captcha Klasse für ein Forum. Ich habs versucht jedoch ohne viel Erfolg. Muss zudem gestehen, dass ich mich vorher nie mit den Imagefunktionen beschäftigt habe. Wäre nett wenn ihr mal über den Code schauen könntet und mir Fehler aufweisen könntet. Für ein Paar Tips zur Verbesserung bin ich natürlich auch offen. Ich suche jetzt schon seit zwei stunden und habe nichts richtiges gefunden. Wäre euch echt dankbar! Die Klasse sieht so aus:
Der Aufruf dieser Klasse sieht so aus:
MfG, Andy
Ich habe ein kleines Problem. Ein Freund von mir brauchte eine Captcha Klasse für ein Forum. Ich habs versucht jedoch ohne viel Erfolg. Muss zudem gestehen, dass ich mich vorher nie mit den Imagefunktionen beschäftigt habe. Wäre nett wenn ihr mal über den Code schauen könntet und mir Fehler aufweisen könntet. Für ein Paar Tips zur Verbesserung bin ich natürlich auch offen. Ich suche jetzt schon seit zwei stunden und habe nichts richtiges gefunden. Wäre euch echt dankbar! Die Klasse sieht so aus:
PHP:
<?php
error_reporting(E_ALL);
/* The Captcha class */
class Captcha
{
/*Captcha Variables*/
protected $font_face;
protected $captcha_string;
protected $blanko_image;
protected $captcha_image;
protected $captcha_width = 150;
protected $captcha_height = 50;
protected $captcha_highlights = 50;
/**
* Creates a string with letters and numbers
*
* @name Captcha::create_string()
* @access public
* @return boolean
*/
public function create_string()
{
$letters = range('a','z');
$numbers = range(1,26);
$captcha = '';
for ($i = strlen($captcha); $i < 3; $i++)
{
$rnum = mt_rand(0,25);
$captcha[] = $numbers[$rnum];
unset($rnum);
$rlet = mt_rand(0,25);
$captcha[] = $letters[$rlet];
unset($rlet);
}
shuffle($captcha);
for ($i = 0; $i < count($captcha); $i++)
{
$this->captcha_string .= $captcha[$i];
}
$_SESSION['captcha'] = $this->captcha_string;
return true;
}
/**
* Creates a blanko-image for the captcha
*
* @name Captcha::create_blanko_image()
* @access public
* @return boolean
*/
public function create_blanko_image()
{
$font = mt_rand(1,5);
$this->font_face = $font;
$imgwidth = (strlen($this->captcha_string)*imagefontwidth($font)) + 10;
$imgheight = imagefontheight($font) + 10;
if ($imgwidth < $this->captcha_width) { $imgwidth = $this->captcha_width; }
if ($imgheight < $this->captcha_height) { $imgheight = $this->captcha_height; }
$blanko_image = imagecreate($imgwidth, $imgheight);
$this->blanko_image = $blanko_image;
return true;
}
/**
* Fills the blanko-image for the captcha
*
* @name Captcha::fill_blanko_image()
* @access public
* @return boolean
*/
public function fill_blanko_image()
{
for ($i = 0; $i < $this->captcha_highlights; $i++)
{
$colors[] = imagecolorallocate($this->blanko_image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
}
for ($i = 0; $i < $this->captcha_highlights; $i++)
{
imagerectangle($this->blanko_image, mt_rand(0,$this->captcha_width),mt_rand(0,$this->captcha_height),mt_rand(0,$this->captcha_width),mt_rand(0,$this->captcha_height), $colors[$i]);
imageline($this->blanko_image, mt_rand(0,$this->captcha_width),mt_rand(0,$this->captcha_height),mt_rand(0,$this->captcha_width),mt_rand(0,$this->captcha_height), $colors[$i]);
}
$captcha_image = imagestring($this->blanko_image,$this->font_face,10,10,$this->captcha_string,$colors[mt_rand(0,$this->captcha_highlights)]);
$this->captcha_image = $captcha_image;
return true;
}
/**
* Shows the finished captcha
*
* @name Captcha::show_captcha()
* @access public
* @return boolean
*/
public function show_captcha()
{
header("content-type: image/gif");
$this->create_string();
$this->create_blanko_image();
$this->fill_blanko_image();
imagegif($this->captcha_image);
imagedestroy($this->captcha_image);
return true;
}
}
?>
PHP:
<?php
include ('Captcha.php');
$cap = new Captcha();
$cap->show_captcha();
?>