PHP da oddiy captcha hosil qilamiz!


Bizga captcha nimaga kerakligini barchamiz yaxshi bilsak kerak! Bilmaganlar uchun oddiy qilib tushuntirib ketmoqchiman. Captcha internetdagi spamlardan, robotlardan bizning saytimizni himoyalaydi. Qanday himoyalaydi? Himoyalash userga, spamga, robotga savol berish orqaliy himoyalayid. Himoyalashning eng yaxshi variantlaridan biri bu rasm orqaliydir. Biz hozir php da captcha hosil qilishni o’rganamiz.
kodga o’tamiz:
Biz rasmimizda tekistga tasodifiy raqamlarni kiritamiz va bizga rand() funksiyasi tasodifiy sonlarni hosil qilishimizga yordom beradi.
Rand() funksiyasida ikkita kiruvchi parameter bor:
int rand ( [int min, int max] )

ya’ni minimal son va maximal sonlarni kiritamiz.
$randomNumber=rand(1000, 9999);

Bu tasodifiy raqamni sessiaga md5 shifirlash orqaliy saqlab olamiz.
$_SESSION[‘code’]=md5($randNumber);

Yangi rasm hosil qilamiz va php da bizga imagecreatetruecolor() funksiyasi yordom beradi. Bu funksiyaning ikki kiruvchi parametiri bor hosil qilinayotgan rasm faylning eni va bo’yi hajmlaridir.
$rasm=imagecreate(200, 80);

Hosil qilingan rasmimiz uchun ranglar hosil qilib uni o’zgaruvchilarimizda saqlab olamiz.
Bu ishda phpning imagecolorallocate() funksiyasi yordom beradi. Uning kiruvchi parmetrlari 4 ta bo’lib hosil qilinayotgan rasm va RGB ranglartizimi:
$oq=imagecolorallocate($rasm, 255, 255, 255);

Navbat fontga keldi
$font="fonts/cour.ttf";

Rasmimizga tekistni kiritamiz
array imagettftext (resource image, int size, int angle, int x, int y, int col, string fontfile, string text)


imagefilledrectangle($rasm, 0, 0, 200, 35, $qora);

Rasm hosil qilishdagi oxirgi qadamimiz.
imagettftext($rasm, rand(30, 45), 0, 24, 55, $oq, $font, $randomNumber);
header("Content-Type: image/gif");
imagegif($rasm);
imagedestroy($rasm);

Mana captcha qimimiz ham tayyor endi undan foydalanamiz.
index.php:
<!DOCTYPE HTML>
<head>
	<meta http-equiv="content-type" content="text/html" />
	<meta name="author" content="dilshod" />
	<title>Captcha</title>
</head>

<body>
<img src="captcha.php" />
<form method="POST" action="check.php">
<input type="text" name="captcha" /><br />
<input type="submit" value="tekshir" />
</form>
</body>
</html>

Check.php:
<?php
session_start();
if($_SESSION['code']==md5($_POST['captcha']))
{
    echo "To'g'ri";
}else
{
    echo "Noto'g'ri";
}
?>

Captcha.php:
<?php
session_start();
$randomNumber=rand(1000, 9999);
$_SESSION['code']=md5($randomNumber);
$rasm=imagecreate(200, 80);
$oq=imagecolorallocate($rasm, 255, 255, 255);
$font=«fonts/cour.ttf»;
imagefilledrectangle($rasm, 0, 0, 200, 35, $qora);

imagettftext($rasm, rand(30, 45), 0, 24, 55, $oq, $font, $randomNumber);
header(«Content-Type: image/gif»);
imagegif($rasm);
imagedestroy($rasm);

?>

Sourceni yuklab olish

3 комментария

shranet
Maqola sarlavhasida «oddiy» deb yozilmaganida buni bot o'qishi oson deb yozardim. Shunday bo'lasada shu captchani o'qiydigan bot yasab beraman. Buni ham opennet.uz da kuting.
3
DasturchiUZ
Buni slojnostlarini ham qilishim mumkin, ammo huddi siz keltirganingizdag oddiy deb nomlaganman
0
geniuz
bir vaqtlar codeigniterda qilgandim, lekin maniki aaancha bezopasniyroq edi
1