done_all ساخت تصویر امنیتی (کپچا یا captcha) در php
692 2

با آموزش ویژه دیگری از سری آموزش های برنامه نویسی تحت عنوان آموزش ساخت تصویر امنیتی یا Captcha با php در خدمت شما هستیم.

تصویر امنیتی یا کپچا به چه منظور ساخته میشود؟

تصویر امنیتی شامل یک بکگراند و حروف یا اعدادی می باشد که این حروف توسط انسان قابل تشخیص می باشد ولی توسط کامپیوتر به راحتی قابل تشخیص نمی باشد. این تصویر به منظور شناسایی انسان و ربات در ارسال اطلاعات یک فرم مورد استفاده قرار می گیرد. حدس حروف روی یک تصویر توسط انسان براحتی انجام می گیرد ولی تشخیص همان حروف توسط ربات ها بسیار دشوار بسته به پردازش تصویر آنها دارد.

پیش نیازی های یادگیری آموزش ساخت کپچا در php

در این آموزش لازم است تا با مفاهیم زیر تا حدودی آشنا باشید:

  • آموزش HTML
  • آموزش PHP

بسیار خب حالا که با مقدمات و پیش نیازهای این آموزش آشنا شدید آموزش ساخت تصویر امنیتی در php را شروع می کنیم

ساخت تصویر امنیتی در php

ابتدا یک فرم نظر خواهی لازم داریم. با فیلدهایی مانند نام ، ایمیل و غیره که ارتباطی با این آموزش ندارند کاری نداریم. فقط یک فیلد متنی را در نظر بگیرید که کاربر قرار است متن روی تصویر امنیتی را در آن وارد کند و یک تصویر که همان تصویر امنیتی می باشد را  طراحی می کنیم. 
 

<form action="final.php" method="post">
    <label>captcha:</label>
    <input type="text" name="captcha"> <br>
    <img src="" alt=""captcha> <br>
    <input type="submit">
</form>

بسیار خب. اگر دقت کنید یک تگ <img> نیز در این فرم وجود دارد که قرار است تصویر امنیتی که توسط سیستم با هر بار بارگذاری صفحه تولید می شود را نمایش دهد.

اما سیستم چگونه می تواند تصویر امنیتی تولید کند

در فایلی به نام captcha.php این تصویر را تولید می کنیم. این تصویر دارای 6 حرف از a-z و A-Z و اعداد 0-9 می باشد که به صورت تصادفی این کاراکتر ها ساخته می شود. 
برای تولید 6 رشته تصادفی از حروف یاد شده این گونهعمل می کنیم.

$string = "ABCDEFGHIJKLMNOPQRSTWXYZ0123456789abcdefghigklmnopqrstwxyz";
$string = substr(str_shuffle($string),0,6);
$_SESSION['captcha'] = $string;

توجه داشته باشید که متغیر $string شامل کلیه حروف و اعدادی است که قرار است از این حروف 6 کاراکتر تصادفی انتخاب کنیم. برای این کار از تابع str_shuffle در php استفاده می کنیم. این تابع رشته مورد نظر را مخلوط و رشته ای تصادفی از همین کاراکتر ها را بر می گرداند. بعد از ارائه رشته تصادفی توسط تابع substr از مکان شماره 0 یعنی اولین رشته تا مکان شماره 6 تعداد 6 رشته را جدا می کنیم. سپس یک session با نام captcha می سازیم و مقدار متغیر $string را برابر آن قرار می دهیم تا در آخر متن وارد شده توسط کاربر با آن مقایسه شود.

سپس توسط کد زیر نوع فایل  captcha.php را از نوع تصویر و فرمت آن را jpeg تعیین می کنیم. 
 

header('Content-type: image/jpeg');

حال متغیر های اندازه طول و عرض تصویر و اندازه فونت کاراکتر ها را تولید می کنیم :
 

$width = 200;
$height = 100;
$font_size = 35;

سپس نوبت به تولید بک گراند تصویر امنیتی می رسد که اینگونه آن را می سازیم :

$image = imagecreate($width,$height);
imagecolorallocate($image,0,0,0);

سپس متن روی تصویر را با رنگ سفید تولید می کنیم:

$text_color = imagecolorallocate($image,255,255,255);
imagettftext($image,$font_size,10,20,75,$text_color,'font.ttf',$string);

توجه داشته باشید که تابع imagettftext یک متن با فونت ttf روی تصویر مورد نظر ایجاد می کند. اعداد 10، 20 و 75  به ترتیب زاویه چرخش متن، فاصله متن از محور x و فاصله متن از محور y را تعیین می کنند. font.ttf نیز نام فونت مورد نظر با فرمت ttf می باشد.
و در نهایت تصویر امنیتی را تولید میکنیم. 

 

imagejpeg($image);

حال کافیست تا آدرس تصویر ساخته شده را در تگ <img> واقعدر فرم فایل form.php وارد کنیم:
 

<img src="captcha.php" alt="captcha">

در فرم final.php نیز مقدار عبارت وارد شده توسط کاربر را با session[‘captcha’] مقایسه می کنیم تا صحت آن بررسی شود : 

session_start();
if ($_POST['captcha'] == $_SESSION['captcha']) {

    echo "Dorost ast";
} else {
    echo "Na Dorost ast";
}

 

آیا این مطلب برای شما مفید بود؟

دسترسی سریع

ثبت دامنه

ثبت دامنه

فالوور و لایک

افزایش فالوور و لایک

طراحی لوگو

طراحی لوگو

طراحی سایت

طراحی سایت

هاست لینوکس

هاست لینوکس

افزایش بازدید

افزایش بازدید
 پرینت این مقاله

در همین زمینه

ساخت کلمه عبور امن تصادفی در php

امروز به آموزش نحوه ساخت کلمه عبور تصادفی در php می پردازیم. این کلمه عبور قرار است توسط سیستم...

راجع به عملگرها در PHP بیشتر بدانید

در این آموزش قصد داریم تا با عملگرها یا Operators آشنا شویم. عملگر یا Operators در PHP  چیست ؟...

صفحه بندی یا pagination ساده با کمک php و mysql

در این آموزش سعی بر آن شده تا نحوه صفحه بندی در php را به صورت خیلی مبتدی و آسان توضیح دهم تا...

PDO یا MySQLi – کدام را باید استفاده کرد؟

هنگامی که قصد داریم در PHP به یک پایگاه داده دسترسی داشته باشیم، برای ما دو راه وجود...

یادگیری بیشتر Session ها در php

Session در php چيست ؟ در جلسات قبل دانستيد که متغيرها اين امکان را به شما مي دهند تا مقداري را...