با آموزش ویژه دیگری از سری آموزش های برنامه نویسی تحت عنوان آموزش ساخت تصویر امنیتی یا 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>
HTML

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

imagejpeg($image);
PHP

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

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

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

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

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

 

آیا این پاسخ به شما کمک کرد؟ 4 کاربر این را مفید یافتند (14 نظرات)