انجمن برنامه نویس

آموزش : ایجاد کد کپچا در php

شروع موضوع توسط hostyar ‏30/4/18 در انجمن طراحی سایت با پی اچ پی (PHP)

گنجینه های
برنامه نویسی
فیلم های آموزشی
زبان های برنامه نویسی
فیلم های آموزشی
پروژه محور C#
فیلم های آموزشی
برنامه نویسی اندروید
فیلم های آموزشی
طراحی سایت
فیلم های آموزشی
برنامه نویسی پایه
گنجینه برنامه نویسی C# آموزش برنامه نویسی C سیستم مدیریت بانک آموزش اندروید - مقدماتی آموزش زبان HTML اصول و مبانی برنامه نویسی
گنجینه آموزش ASP .Net آموزش برنامه نویسی C++‎ پیاده سازی مدیریت آتلیه آموزش اندروید - تکمیلی آموزش زبان CSS آموزش الگوریتم و فلوچارت
گنجینه برنامه نویسی PHP آموزش برنامه نویسی C# پیاده سازی سیستم هتلداری آموزش اندروید - پیشرفته آموزش زبان Java Script آموزش تبدیل فلوچارت به کد
گنجینه آموزش طراحی وب آموزش برنامه نویسی جاوا شبیه سازی دستگاه عابربانک آموزش ساخت لیست ایمیل آموزش زبان jQury برنامه نویسی اسمال بیسیک
گنجینه برنامه نویسی متلب آموزش برنامه نویسی PHP پیاده سازی مدیریت آموزشگاه آموزش ساخت گالری تصاویر آموزش زبان XML آموزش برنامه نویسی اسمبلی
گنجینه برنامه نویسی اندروید آموزش برنامه نویسی پایتون پیاده سازی سیستم صدور بلیت آموزش کنترل ربات با اندروید آموزش طراحی Responsive طراحی سایت ویژه کودکان
گنجینه برنامه نویسی VB .Net آموزش برنامه نویسی اندروید پیاده سازی سیستم نوبت دهی آموزش ارتباط با دیتابیس سرور ساخت سایت خبری کدنویسی سریع با Emmet
گنجینه زبان های برنامه نویسی آموزش برنامه نویسی زبان R سیستم حسابداری و انبارداری زبان بیسیک فور اندروید (B4A) ساخت سایت فروشگاه آموزش کار با پایگاه داده
  1. hostyar
    karbar Rank

    تاریخ عضویت:
    ‏24/4/18
    ارسال ها:
    2
    تشکر شده:
    0
    امتیاز دستاورد:
    5
    جنسیت:
    زن
    سلام
    میشه لطفا به من توضیح بدید که چه شکلی میتونم در پی اچ پی کد کچا ایجاد کنم
     
  2. seoyar
    karbar Rank

    تاریخ عضویت:
    ‏30/4/18
    ارسال ها:
    1
    تشکر شده:
    0
    امتیاز دستاورد:
    5
    آموزش ایجاد کد کپچا در php
    معمولا شما در بیشتر سایت هایی که دارای فرم های اینترنتی هستند شاهد کدهای کپچا (captcha)تصویر امنیتی – هستید. بیشتر این کدها از کلمات به هم ریخته ای تشکیل شده است که شما باید شکل صحیح آن را وارد نموده تا بتوانید از عهده ی این تست بر آیید. کد کپچا مخفف عبارت (Completely Automated Public Turing test to tell Computers and Humans Apart) می باشد ؛ یعنی تست کاملا خودکار برای تشخیص انسان از رایانه. هدف از ایجاد کد کپچا در php این است که کاربران از عهده ی تست کد کپچا بر می آیند ولی رایانه ها به تنهایی نمی توانند از عهدی این آزمون ( تصویر امنینی کد کپچا ) برآیند. لذا در ادامه ی بحث می پردازیم به کد ایجاد تصویر امنیتی ساده (کپچا) در php ، تا بتوانید به راحتی برای فرم های ورود ، عضویت ، نظرات و هر آن چه که برای امنیت سایت نیاز به ایجاد کد کپچا در php دارید ، آن را وارد نمایید. با وب یار همرا باشید تا نحوه ی ایجاد کد کپچا در php را به شما نشان دهیم و از آن لذت ببرید.



    [​IMG]
    کد ایجاد تصویر امنیتی ساده



    کاربردهای کد کپچا


    • تصویر امنیتی برای جلوگیری از اسپم در بلاگها و سایر وب‌گاه‌ها
    • تصویر امنیتی برای جلوگیری از نفوذ ربات ها به رایانه ها
    • تصویر امنیتی برای جلوگیری از نفوذ هکرها به رایانه ها


    مراحل ساخت کد تصویر امنیتی (کپچا) در php


    ابتدا باید دو فایل به نام های index.php و simplephpcaptch.php ایجاد کنید. (البته توجه نمایید که دو فایل simplephpcaptch.php و index.php کافی نبوده و نیازمند فونت و لیست لغات است که در پایین صفحه ضمیمه شده اند.)



    فایل index.php
    بعد از ایجاد فایلindex.php قطعه کدهای زیر را داخل آن قرار دهید.



    کد html
    <img height="70" width="200" src="simplephpcaptcha.php"/> <form action="" method="post"> <input type="text" name="captcha" /> <input type="submit" name="submit" /> </form>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <img height="70"width="200"src="simplephpcaptcha.php"/>

    <form action=""method="post">

    <input type="text"name="captcha"/>

    <input type="submit"name="submit"/>

    </form>


    خط اول یک image ایجاد می کند که این تصویر در فایل simplephpcaptch.php ایجاد می شود و در صفحه ی index.php فراخوانی و نهایتا به نمایش در می آید. در خط بعدی یک فرم ایجاد می شود که کاربر باید کد کپچا ( تصویر امنیتی ) به نمایش در آمده را در این قسمت وارد نماید.

    [​IMG]
    آموزش ایجاد تصویر امنیتی ساده (کپچا) در php

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



    <?php session_start(); if(isset($_POST['submit'])){ if($_SESSION['captcha'] == $_POST['captcha']){ echo "Captcha Is Correct<br>"; }else{ echo "Captcha Isn't Correct<br>"; } } ?>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();
    if(isset($_POST['submit'])){
    if($_SESSION['captcha']==$_POST['captcha']){
    echo"Captcha Is Correct<br>";
    }else{
    echo"Captcha Isn't Correct<br>";
    }
    }
    ?>


    فایل simplephpcaptch.php
    در این فایل کد کپچا ایجاد شده و به صفحه ی ایندکس ارسال می شود. اینک به توضیح کدهای موجود در این فایل می پردازیم.



    $fp = fopen('xsixlw.txt',"r"); $count = filesize('xsixlw.txt')/6 - 1; $pos = 6*rand(0,$count); fseek($fp,$pos); $captcha = warpedCaptcha(trim(fread($fp,6))); fclose($fp);
    1
    2
    3
    4
    5
    6
    $fp=fopen('xsixlw.txt',"r");
    $count=filesize('xsixlw.txt')/6-1;
    $pos=6*rand(0,$count);
    fseek($fp,$pos);
    $captcha=warpedCaptcha(trim(fread($fp,6)));
    fclose($fp);


    در قطعه کد بالا از فایل xsixlw.txt برای استفاده از حروف به صورت رندم استفاده شده است.

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



    تابع warpedCaptcha
    if (5 > rand(0,6)) return $text; $ltrs = array('b'=>'b','c'=>'c','d'=>'d','f'=>'f','g'=>'g','h'=>'h','j'=>'j', 'k'=>'k','l'=>'l','m'=>'m','n'=>'n','p'=>'p','q'=>'q','r'=>'r', 's'=>'s','t'=>'t','v'=>'v','w'=>'w','x'=>'x','z'=>'z'); $vkeys = $vltrs = explode(',','a,e,i,o,u,y'); shuffle($vkeys); $vowels = array(); foreach($vkeys as $ndx=>$vkey) $vowels[$vkey] = $vltrs[$ndx]; $ltrs = array_merge($ltrs,$vowels); $text = str_split($text); $captcha = ''; foreach($text as $txt) $captcha .= $ltrs[$txt]; return $captcha; }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if(5>rand(0,6))return$text;
    $ltrs=array('b'=>'b','c'=>'c','d'=>'d','f'=>'f','g'=>'g','h'=>'h','j'=>'j',

    'k'=>'k','l'=>'l','m'=>'m','n'=>'n','p'=>'p','q'=>'q','r'=>'r',

    's'=>'s','t'=>'t','v'=>'v','w'=>'w','x'=>'x','z'=>'z');

    $vkeys=$vltrs=explode(',','a,e,i,o,u,y');
    shuffle($vkeys);
    $vowels=array();
    foreach($vkeys as$ndx=>$vkey)$vowels[$vkey]=$vltrs[$ndx];
    $ltrs=array_merge($ltrs,$vowels);
    $text=str_split($text);
    $captcha='';
    foreach($text as$txt)$captcha.=$ltrs[$txt];
    return$captcha;
    }


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



    session_start(); $_SESSION['captcha'] = $captcha; session_write_close();
    1
    2
    3
    session_start();
    $_SESSION['captcha']=$captcha;
    session_write_close();


    بعد از ایجاد کد کپچا باید آن را در تصویر قرار بدهیم و رنگ و شکل آن را تغییر دهیم.



    $im = imagecreatetruecolor(200,70); $black = imagecolorallocate($im,0,0,0); imagecolortransparent($im,$black);
    1
    2
    3
    $im=imagecreatetruecolor(200,70);
    $black=imagecolorallocate($im,0,0,0);
    imagecolortransparent($im,$black);


    در کد بالا یک تصویر 200px *70px ایجاد می کند و رنگ پشت زمینه آن را ابتدا سیاه می نماید و سپس پشت زمینه را حذف می کند تا فقط کد کپچا یک border سیاه داشته باشد. بعد از آن نوبت به رنگ آن می رسد ابتدا با استفاده از کد زیر هر تعداد رنگ به دلخواه می توانید ایجاد کنید که هربار یک رنگ به طور رندم انتخاب می شود.

    switch(rand(0,4)) { case 0:$color = imagecolorallocate($im,34,155,91);break; case 1:$color = imagecolorallocate($im,233,26,74);break; case 2:$color = imagecolorallocate($im,233,26,195);break; case 3:$color = imagecolorallocate($im,244,178,19);break; case 4:$color = imagecolorallocate($im,53,125,199);break; }
    1
    2
    3
    4
    5
    6
    7
    8
    switch(rand(0,4))
    {
    case0:$color=imagecolorallocate($im,34,155,91);break;
    case1:$color=imagecolorallocate($im,233,26,74);break;
    case2:$color=imagecolorallocate($im,233,26,195);break;
    case3:$color=imagecolorallocate($im,244,178,19);break;
    case4:$color=imagecolorallocate($im,53,125,199);break;
    }
    سپس نوبت به سایز کد کپچا php می رسیم:



    $x = 20;$y = 47 for ($i=0;$i<6;$i++) $angle = rand(-8,8) + rand(0,9)/10; $fontsize = rand(22,32); $letter = substr($captcha,$i,1); $coords = imagettftext($im,$fontsize,$angle,$x,$y,$color,'oldsans.ttf',$letter); $x += ($coords[2]-$x) + 1; }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $x=20;$y=47
    for($i=0;$i<6;$i++)

    $angle=rand(-8,8)+rand(0,9)/10;
    $fontsize=rand(22,32);
    $letter=substr($captcha,$i,1);
    $coords=imagettftext($im,$fontsize,$angle,$x,$y,$color,'oldsans.ttf',$letter);
    $x+=($coords[2]-$x)+1;
    }


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

    به تابع imagettftext() به ترتیب پشت زمینه ، سایز، زاویه ،موقعیت ، رنگ ، نوع فونت ، حرف مورد نظر داده می شود و حرف مورد نظر به نمایش در می آید.

    حال فایل های مورد نیاز را می توانید از این قسمت دانلود نمایید.



    دانلود کد ایجاد تصویر امنیتی ساده (کپچا) در php



    اما در هر صورت اگر دسترسی به کدهای سایت خود ندارید و یا از سیستم مدیریت محتوا وردپرس استفاده می نمایید و وقت برای کد نویسی ندارید ، پیشنهاد می کنیم که از پلاگین کپچا وردپرس (captcha) استفاده نمایید.



    نتیجه گیری

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