• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ساخت فرم با کد کپچا
#1
سلام.

من یک کد کپچا دارم.

به این صورت:

کد پی‌اچ‌پی:
<?php
session_start
();
$_SESSION = array();

function 
simple_php_captcha($config = array()) {

    
// Check for GD library
    
if( !function_exists('gd_info') ) {
        throw new 
Exception('Required GD library is missing');
    }

    
$bg_path dirname(__FILE__) . '/backgrounds/';
    
$font_path dirname(__FILE__) . '/fonts/';

    
// Default values
    
$captcha_config = array(
        
'code' => '',
        
'min_length' => 5,
        
'max_length' => 5,
        
'backgrounds' => array(
            
$bg_path '45-degree-fabric.png',
            
$bg_path 'cloth-alike.png',
            
$bg_path 'grey-sandbag.png',
            
$bg_path 'kinda-jean.png',
            
$bg_path 'polyester-lite.png',
            
$bg_path 'stitched-wool.png',
            
$bg_path 'white-carbon.png',
            
$bg_path 'white-wave.png'
        
),
        
'fonts' => array(
            
$font_path 'times_new_yorker.ttf'
        
),
        
'characters' => 'ABCDEFGHJKLMNPRSTUVWXYZabcdefghjkmnprstuvwxyz23456789',
        
'min_font_size' => 28,
        
'max_font_size' => 28,
        
'color' => '#666',
        
'angle_min' => 0,
        
'angle_max' => 10,
        
'shadow' => true,
        
'shadow_color' => '#fff',
        
'shadow_offset_x' => -1,
        
'shadow_offset_y' => 1
    
);

    
// Overwrite defaults with custom config values
    
if( is_array($config) ) {
        foreach( 
$config as $key => $value $captcha_config[$key] = $value;
    }

    
// Restrict certain values
    
if( $captcha_config['min_length'] < $captcha_config['min_length'] = 1;
    if( 
$captcha_config['angle_min'] < $captcha_config['angle_min'] = 0;
    if( 
$captcha_config['angle_max'] > 10 $captcha_config['angle_max'] = 10;
    if( 
$captcha_config['angle_max'] < $captcha_config['angle_min'] ) $captcha_config['angle_max'] = $captcha_config['angle_min'];
    if( 
$captcha_config['min_font_size'] < 10 $captcha_config['min_font_size'] = 10;
    if( 
$captcha_config['max_font_size'] < $captcha_config['min_font_size'] ) $captcha_config['max_font_size'] = $captcha_config['min_font_size'];

    
// Generate CAPTCHA code if not set by user
    
if( empty($captcha_config['code']) ) {
        
$captcha_config['code'] = '';
        
$length mt_rand($captcha_config['min_length'], $captcha_config['max_length']);
        while( 
strlen($captcha_config['code']) < $length ) {
            
$captcha_config['code'] .= substr($captcha_config['characters'], mt_rand() % (strlen($captcha_config['characters'])), 1);
        }
    }

    
// Generate HTML for image src
    
if ( strpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['DOCUMENT_ROOT']) ) {
        
$image_src substr(__FILE__strlenrealpath($_SERVER['DOCUMENT_ROOT']) )) . '?_CAPTCHA&amp;t=' urlencode(microtime());
        
$image_src '/' ltrim(preg_replace('/\\\\/''/'$image_src), '/');
    } else {
        
$_SERVER['WEB_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], ''$_SERVER['SCRIPT_FILENAME']);
        
$image_src substr(__FILE__strlenrealpath($_SERVER['WEB_ROOT']) )) . '?_CAPTCHA&amp;t=' urlencode(microtime());
        
$image_src '/' ltrim(preg_replace('/\\\\/''/'$image_src), '/');
    }

    
$_SESSION['_CAPTCHA']['config'] = serialize($captcha_config);

    return array(
        
'code' => $captcha_config['code'],
        
'image_src' => $image_src
    
);

}


if( !
function_exists('hex2rgb') ) {
    function 
hex2rgb($hex_str$return_string false$separator ',') {
        
$hex_str preg_replace("/[^0-9A-Fa-f]/"''$hex_str); // Gets a proper hex string
        
$rgb_array = array();
        if( 
strlen($hex_str) == ) {
            
$color_val hexdec($hex_str);
            
$rgb_array['r'] = 0xFF & ($color_val >> 0x10);
            
$rgb_array['g'] = 0xFF & ($color_val >> 0x8);
            
$rgb_array['b'] = 0xFF $color_val;
        } elseif( 
strlen($hex_str) == ) {
            
$rgb_array['r'] = hexdec(str_repeat(substr($hex_str01), 2));
            
$rgb_array['g'] = hexdec(str_repeat(substr($hex_str11), 2));
            
$rgb_array['b'] = hexdec(str_repeat(substr($hex_str21), 2));
        } else {
            return 
false;
        }
        return 
$return_string implode($separator$rgb_array) : $rgb_array;
    }
}

// Draw the image
if( isset($_GET['_CAPTCHA']) ) {

    
session_start();

    
$captcha_config unserialize($_SESSION['_CAPTCHA']['config']);
    if( !
$captcha_config ) exit();

    if( isset(
$_GET['_RENDER']) ) {
        
$_SESSION['_CAPTCHA'] = simple_php_captcha();
    } else {
        unset(
$_SESSION['_CAPTCHA']);
    }

    
// Pick random background, get info, and start captcha
    
$background $captcha_config['backgrounds'][mt_rand(0count($captcha_config['backgrounds']) -1)];
    list(
$bg_width$bg_height$bg_type$bg_attr) = getimagesize($background);

    
$captcha imagecreatefrompng($background);

    
$color hex2rgb($captcha_config['color']);
    
$color imagecolorallocate($captcha$color['r'], $color['g'], $color['b']);

    
// Determine text angle
    
$angle mt_rand$captcha_config['angle_min'], $captcha_config['angle_max'] ) * (mt_rand(01) == ? -1);

    
// Select font randomly
    
$font $captcha_config['fonts'][mt_rand(0count($captcha_config['fonts']) - 1)];

    
// Verify font file exists
    
if( !file_exists($font) ) throw new Exception('Font file not found: ' $font);

    
//Set the font size.
    
$font_size mt_rand($captcha_config['min_font_size'], $captcha_config['max_font_size']);
    
$text_box_size imagettfbbox($font_size$angle$font$captcha_config['code']);

    
// Determine text position
    
$box_width abs($text_box_size[6] - $text_box_size[2]);
    
$box_height abs($text_box_size[5] - $text_box_size[1]);
    
$text_pos_x_min 0;
    
$text_pos_x_max = ($bg_width) - ($box_width);
    
$text_pos_x mt_rand($text_pos_x_min$text_pos_x_max);
    
$text_pos_y_min $box_height;
    
$text_pos_y_max = ($bg_height) - ($box_height 2);
    if (
$text_pos_y_min $text_pos_y_max) {
        
$temp_text_pos_y $text_pos_y_min;
        
$text_pos_y_min $text_pos_y_max;
        
$text_pos_y_max $temp_text_pos_y;
    }
    
$text_pos_y mt_rand($text_pos_y_min$text_pos_y_max);

    
// Draw shadow
    
if( $captcha_config['shadow'] ){
        
$shadow_color hex2rgb($captcha_config['shadow_color']);
        
$shadow_color imagecolorallocate($captcha$shadow_color['r'], $shadow_color['g'], $shadow_color['b']);
        
imagettftext($captcha$font_size$angle$text_pos_x $captcha_config['shadow_offset_x'], $text_pos_y $captcha_config['shadow_offset_y'], $shadow_color$font$captcha_config['code']);
    }

    
// Draw text
    
imagettftext($captcha$font_size$angle$text_pos_x$text_pos_y$color$font$captcha_config['code']);

    
// Output image
    
header("Content-type: image/png");
    
imagepng($captcha);
$_SESSION['captcha'] = simple_php_captcha();

?>
<!DOCTYPE html>
<html>
<head>
    <title>Example &raquo; A simple PHP CAPTCHA script</title>
</head>
<body>

        <?php
        
echo '<img src="' $_SESSION['captcha']['image_src'] . '" alt="CAPTCHA code">';
print_r($_SESSION['captcha']);
        
?>
</body>
</html> 
الان میخوام این کد کپچا رو توو فرم استفاده کنم.

چکار باید بکنم؟
  پاسخ
تشکر شده توسط :
#2
دوستان کسی هست؟
  پاسخ
تشکر شده توسط :
#3
سلام و وقت بخیر

(فرصت نشد کد رو تست کنم)

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

سعی کنید رشته ای که ایجاد میشه بصورت md5 در سشن ریخته شود.
از طریق فایل htaccess آدرس جدید براش تنظیم کنین : (site.com/captcha.png) . اینجوری نباشه : Site.com/file/admin/captcha.php
در ابتدای این فایل یا فانکشن ، شرط بزارین اگر ورودی (Referrer) از سایت خودتون بود ، عکس نمایش داده شود.
و در هر فرمی که از آن استفاده کردین ، اولین شرطتون بررسی کد امنیتی باشه ، سپس بقیه شرط ها.
و ...

موفق باشید.
  پاسخ
تشکر شده توسط : MRCanddy sara147


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان