Перед вами простой основанный на PHP/GD скрипт каптчи, который поможет предотвратить поток спама. Каптча предназначена для гостевых книг, форм обратной связи и любых других приложений способных воспроизвести спам посредством веб-ботов. Статья не претендует на панацею, но как простейшая альтернатива вполне себе ничего.

Все что нам нужно: PHP с библиотекой GD (начиная с версии PHP 4.3 входит в стандартную поставку интерпретатора) и шрифт формата true type. Данный шрифт пригодится для создания изображения.

Сперва создайте PHP файл, который будет генерировать изображения, например, captcha.php.

<?php
    session_start();
 
    // создаем случайное число и сохраняем в сессии
 
    $randomnr = rand(1000, 9999);
    $_SESSION['randomnr2'] = md5($randomnr);
 
    //создаем изображение
    $im = imagecreatetruecolor(100, 38);
 
    //цвета:
    $white = imagecolorallocate($im, 255, 255, 255);
    $grey = imagecolorallocate($im, 128, 128, 128);
    $black = imagecolorallocate($im, 0, 0, 0);
 
    imagefilledrectangle($im, 0, 0, 200, 35, $black);
 
    //путь к шрифту:
 
    $font = '/var/www/font.ttf';
 
    //рисуем текст:
    imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
 
    imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
 
    // предотвращаем кэширование на стороне пользователя
    header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
 
    //отсылаем изображение браузеру
    header ("Content-type: image/gif");
    imagegif($im);
    imagedestroy($im);
?>

Ниже приведен код с формой, в которой содержитя путь к файлу captcha.php.

<html>
<head>
    <title>HTML форма с капчей PHP</title>
</head>
<body>
    <form method="post" action="write.php">
        <input class="input" type="text" name="norobot" />
        <img src="captcha.php" />
        <input type="submit" value="Submit" />
    </form>
</body>
</html>

Далее нам потребуется файл, в котором будет проверяться валидность капчи и введенные пользователем значения. Связать этот файл с формой поможет атрибут тега form action, значение которого указывает на путь к файлу. Код данного файла может выглядеть следующим образом:

<?php
    session_start();
    if (md5($_POST['norobot']) == $_SESSION['randomnr2'])   { 
        
            echo "Отлично , кажется, что вы не робот";
    }   else {  
        
            echo "вы весьма надоедливый бот!";
    }
?>

Источник

Комментарии

comments powered by Disqus