linkedin facebook linkedin facebook nod32

Php da Captcha yaratish usuli

Muallif: Mengliyev Sh.

Qo`shilgan sana: 2017-02-03

Php da Captcha yaratish usuli

Qadam 1. - captcha.php va sessiya. Captcha-bu biror xabarni yuborishda foydalana oladigan raqamlar yoki sonlar ketma-ketligi shu raqamlarni tasdiqlash yordamida xabar qabul qilinadi. Dastlab biz captcha.php deb nomlangan yangi php sahifa yaratish kerak. Bundan tashqari, bu yangi hujjatda, siz session_start () funktsiyasidan foydalanib, serverga sessiyasi ochish kerak. Bundan tashqari, biz "string" boʻsh oʻzgaruvchilar kerak. Biz matn CAPTCHA boʻlgan ishlab chiqarish uchun, keyinchalik bu oʻzgaruvchilar foydalanishingiz boʻladi.
<?
session_start();
$string = '';

Qadam 2. - Tasodifiy string. Tasodifiy satrlar soni 5 tadan oshib ketmaydigan satr ishlab chiqarish uchun yaratadi. Biz bu satr qatorni olib va oʻzgaruvchilarni "random_code" tizimga joylashtirishsa boʻladi.
<?php
session_start();
$string = '';
for ($i = 0; $i < 5; $i++) {
$string .= chr(rand(97, 122));
}
$_SESSION['rand_code'] = $string;

Chr () funktsiyasi yordamida har bir iteratsiyada (yaqinlash) oʻzgaruvchan $string ga belgi qoʻshadi. Misol yuqorida 5 belgidan taskil topgan, lekin siz uni oʻzgartirishingiz mumkin. Raqamni almashtirish kifoya, boshqa har qanday uchun "$i <5 " (masalan, 7) raqamiga almashtirish mumkin.

Qadam 3. – Rang va fonts papkaga .ttf kengaytmali faylni saqlash.
Biz font olingan captcha tasvirlar saqlash uchun fonts papkani yaratish kerak va bu papka ichiga arial.ttf yoki verdana.ttf kengaytmali faylni internetdan yuklab olib fonts papka ichiga joylashtiring. CAPTCHAning ranglari haqida oʻylab koʻrish kerak. Buning uchun, bizga quyidagi juda oddiy kodni kerak.
$dir = 'fonts/'; //fonts papka nomini yaratib oladi
$image = imagecreatetruecolor(170, 60);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 200, 100, 90); // qizil
$white = imagecolorallocate($image, 255, 255, 255);
Koʻrib turganingizdek, "fonts" bizning papkalar nomi boʻlib, $dir fonts papkada .ttf kengaytmali fayl saqlanadi. Oʻzgaruvchan $image joy qaerda imagecreatetruecolor () funktsiyasi yordamida CAPTCHA rasmini 60 piksel 170 piksel yaratib olamiz. Bu xususiyat, belgilangan hajmi tashqari xolatda qora tasvir olish imkonini beradi. RGB yordamida 5-ta raqamning rangini belgilaydi.

Qadam 4. – Rasmni yaratish
$image-rasmda oq toʻrtburchaklar xosil qilinadi. Shundan soʻng biz bir rasmga matn kiritishni amalga oshiramiz.
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, $dir."verdana.ttf", $_SESSION['rand_code']);
imagefilledrectangle () funktsiyasi rasmda bir toʻrtburchaklar xosil qiladi. Qavs ichida toʻrt raqamlar toʻrtburchak burchaklar koordinatalarini ifodalaydi. 100 pikselli toʻrtburchakni 200 pikselga almashtirish mumkin.
imagettftext ()-yozuvni turli xil rasmga matn kiritish imkonini beradi yordamida.
imagettftext($image, $font_size, $angle, $x, $y, $color ,$font_file ,$text);
Yuqoridagi kodning liniyasini solishtirgan boʻlsangiz, osongina parametrlarini tushunish mumkin. Tasvir, keyin shrift hajmi, matn burchagi, x va (yuqori chap burchak) matni y koordinatalari, matn rangi, shrift bilan reja fayl va matn oʻzi (bizning tasodifiy string) bor.

Qadam 5. - Tayyor rasm

Sahifaning bosh qismida header (yordamida brauzer, rasm turini tanlash kerak. Bu oxirida u tasvirni yaratish uchun zarur.
header("Content-type: image/png");
imagepng($image);
?>

captcha.php toʻliqkodi:

<?php
session_start();
$string = '';
for ($i = 0; $i < 5; $i++) {
$string .= chr(rand(97, 122));
}
$_SESSION['rand_code'] = $string;
$dir = 'fonts/';;//fonts papka nomini yaratib oladi
$image = imagecreatetruecolor(170, 60);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 200, 100, 90); // qizil
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, $dir."verdana.ttf", $_SESSION['rand_code']);
header("Content-type: image/png");
imagepng($image);
?>
Server orqali ishga tushuring va quyidagi natijaga ega boʻlasiz:

Qadam 6 - contact.php fayl hosil qilish.
Yangi sahifa contact.php yarating. Bu sahifa bizni anti-spam himoya qilishda foydalaniladi va xabar qoldirish formasida oʻz ichiga oladi.

<?php

session_start();
if(isset($_POST['submit'])) {
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message']) && !empty($_POST['code'])) {
if($_POST['code'] == $_SESSION['rand_code']) {
$accept = "Rahmat ma`lumot qabul qilindi.";
}
else
{
$error = "Kodni kiritishda xato qaytadan urunib ko`ring .";
}
}
else
{
$error = "Kiritishda xato bor qaytadan urinib ko`ring.";
}
}
?>
<!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=utf-8" />
<title>Xabar yuborish</title>
<style type="text/css">
form {
margin:0;
padding:0;
}
input {
padding:2px;
width:200px;
}
textarea {
padding:2px;
width:200px;
height:100px;
}
.button {
width:60px;
}
p {
margin:0 0 5px 0;
padding:0;
}
.error {
color:#FF0000;
margin:0 0 10px 0;
}
.accept {
color:#339966;
margin:0 0 10px 0;
}
</style>
</head>
<body>
<?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?>
<?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<p>F.I.Sh.<br><input type="text" name="name" /> </p>
<p>E-mail pochta<br><input type="text" name="email" /> </p>
<p><textarea name="message"></textarea></p>
<img src="captcha.php"/>
<p>Rasmdagi kodni kiriting?<br><input type="text" name="code" /> </p>
<p><input type="submit" name="submit" value="Yuborish" class="button" /></p>
</form>
</body>
</html>

Serverda tekshirib ko`ring va quyidagi natijaga erishasiz:

Yuborish natijasi agar kiritilgan ma’lumot to`g`ri bo`lsa quyidagi natija keladi.

1274 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish

testing

+998915878681

Siz o`z maxsulotingizni 3D reklama ko`rinishda bo`lishini xohlaysizmi? Unda xamkorlik qilamiz.

3D Reklama


Рейтинг@Mail.ru
Рейтинг@Mail.ru

Besucherzahler
счетчик посещений