Създаване на captcha код

Ако Ви се е налагало да триете десетки спамерски коментари или потребители, то няма как да не сте се замисляли как да ограничите ботовете спамещи форума, блога или сайта Ви. Един от начините да ограничите тия нежелани коментари или регистрации е чрез т.н. captcha код. Ще се опитам да ви покажа един елементарен начин да попитате посетителя си “Човек ли сте?”

Какво ни трябва?

Инсталирана GD библиотека на хоста (обикновенно е инсталирана).

Файл с функциите, които ни трябват за създаването, триенето на картинките с кода или задачата примерно 4+3=?.

Ето как изглежда тази функция :

function create_image($image_name,$image_text,$background){

$my_img = imagecreate( 50, 20 );
$background = imagecolorallocate( $my_img, 255, 255, 255 );
$text_colour = imagecolorallocate( $my_img, 0, 0, 0 );
$line_colour = imagecolorallocate( $my_img, 255, 255, 255 );
imagestring( $my_img, 10, 15, 5, $image_text,
$text_colour );
imagesetthickness ( $my_img, 5 );
imageline( $my_img, 30, 45, 165, 45, $line_colour );

#imagepng( $my_img );
imagecolordeallocate( $line_color );
imagecolordeallocate( $text_color );
imagecolordeallocate( $background );

imagepng( $my_img, “”.$image_name);
#imagedestroy( $my_img );

}

function create_image($image_name,$image_text,$background) – името на функцията се казва create_image, $image_name е името на картинката, която искаме да създадем, $background е фона на картинката, който за момента не се променя във функцията (при желание може да се въведе)

$my_img = imagecreate( 50, 20 ); създаване на празна картинка с дължина 50 и височина 20 пиксела.

$background = imagecolorallocate( $my_img, 255, 255, 255 ); създаване на фона на картинката – в момента бял.

$text_colour = imagecolorallocate( $my_img, 0, 0, 0 );  цвят на текста/задачата

$line_colour = imagecolorallocate( $my_img, 255, 255, 255 ); ако искате текста,цифрите да са подчертани с някаква линия ( тази линия не се вижда при зададените сега параметри

imagestring( $my_img, 10, 15, 5, $image_text,  $text_colour ); тук казваме какво да пише на картинката като променливата $image_text e stringa .

imagepng( $my_img, “”.$image_name);Тук задаваме картинката да се запише като .png в същата папка и после можеда се зададе с път примерно $image_name=”img/kartinga43123.png” или ако решите в “” може да напишете папката където да се съхраняват

след това във формата където искате да има captcha код в тоя случай съм направил генериране на лесна задачка от типа 5+4=?

следния код се намира където е формата Ви за регистрация, коментари и т.н.

<?
$random1 = rand(1,9); #- генерира първото число в задачата между 1 и 9
$random2 = rand(1,9);
#- генерира второто число в задачата между 1 и 9

$suma = $random1+$random2;
$randname= rand(1,123211);

create_image(“graphics/img/captcha”.$randname.”.png”,$random1.”+”.$random2.”=”,”black”);

?>
<fieldset>
<legend>Човек ли сте?</legend>
<img src=”graphics/img/<?=”captcha”.$randname.”.png” ?>” alt=”Моля попълнете правилният отговор”> <input type=”text” name=”captcha” size=”5″>Моля попълнете правилният отговор <em>*</em>
<br><small>4+5=? в полето пишете 9</small>
<input type=”hidden” name=”result” value=”<?=$suma; ?>”>
<input type=”hidden” name=”code” value=”<?=”captcha”.$randname.”.png” ?>”>
</fieldset>

$random1 = rand(1,9); #- генерира първото число в задачата между 1 и 9
$random2 = rand(1,9);
#- генерира второто число в задачата между 1 и 9
$suma = $random1+$random2; #-дава сумата от първото и второто число.

$randname= rand(1,123211); дава някакво произволно число, което по-късно служи за кръщаване на кепча картинката.

За да извикаме функция, която генерира картинката трябва първо да инклуднем файла, където сме я написали чрез

include(“path/funciton.php”); path може да е папка1/папка2/ а function.php е името на файла където е записана функцията

create_image(“graphics/img/captcha”.$randname.”.png”,$random1.”+”.$random2.”=”,”black”);

graphics/img/captcha”.$randname.”.png” – първия аргумент във функцията пътя и името на картинката

$random1.”+”.$random2.”=” - това е мястото където задаваме какво да се показва на картинката в случая примерно 4+5= взависимост от числата генерирани като стойности на $random1 и $random2

<img src=”graphics/img/<?=”captcha”.$randname.”.png” ?>” alt=”Моля попълнете правилният отговор”>

graphics/img/<?=”captcha”.$randname.”.png” ?> – graphics/img/ е пътя до папката където се съхраняват временно картинките от captcha кода.

<?=”captcha”.$randname.”.png” ?> тук задаваме как се казва картинката нещо от рода на captcha23213.png

<input type=”text” name=”captcha” size=”5″> тук е полето за записване на отговора от задачката или текст

<input type=”hidden” name=”result” value=”<?=$suma; ?>”> тук предаваме по $_POST какъв е верния отговор на кептча кода т.е. сбора от 4+5 в нашия пример.

<input type=”hidden” name=”code” value=”<?=”captcha”.$randname.”.png” ?>”>- а тук предаваме името на captcha картинката за да можем да я изтрием от папката след проверката и съвпадане на резултата въведен от потребителя и това което сме предали по $_POST променливата.

Ето примерна проверка за правилното попълване на captcha кода

if($_POST['captcha']!=$_POST['result']):
$errMessage = “<br>-<b>Моля дайте точен отговор на кепча кода</b>”;
endif;

Ето и функцията, с която може да триете картинката след като сте проверили дали съвпада

function delete_code($filename){ # filename е името на картинката, което имаме от $_POST['code'] #променливата
chdir(‘директория в която са временните картинки’);
$do = unlink($filename);
if($do==”1″):
return 1;#ако е изтита картинката
else:
return 0;#ако не е изтрита
endif;
}

Leave a Reply