Загрузка...

PHP captcha with refresh without reloading the page.

Thread in Backend created by Hangman666 Jul 13, 2016. 525 views

  1. Hangman666
    Hangman666 Topic starter Jul 13, 2016 Хранитель Идей 342 Mar 10, 2016
    1. Создадим файл captcha.php
    Code

    <?php
    $width = 100; //Ширина изображения
    $height = 60; //Высота изображения
    $font_size = 16; //Размер шрифта
    $let_amount = 4; //Количество символов, которые нужно набрать
    $fon_let_amount = 30; //Количество символов на фоне
    $font = "шрифт.ttf"; //Путь к шрифту
    $letters = array("a","1","c","2","e","3","g"); //Символы которые будут генерироваться на картинке, можно добавить
    $colors = array("90","110","130","150","170","190","210"); //Набор цветов, которые будут также генерироваться
    $src = imagecreatetruecolor($width,$height); //Создаем изображение
    $fon = imagecolorallocate($src,255,255,255); //Создаем фон
    imagefill($src,0,0,$fon); //Заливаем изображение фоном
    for($i=0;$i < $fon_let_amount;$i++) //Добавляем на фон символы
    {
    //случайный цвет
    $color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
    //случайный символ
    $letter = $letters[rand(0,sizeof($letters)-1)];
    //случайный размер
    $size = rand($font_size-2,$font_size+2);
    imagettftext($src,$size,rand(0,45),
    rand($width*0.1,$width-$width*0.1),
    rand($height*0.2,$height),$color,$font,$letter);
    }
    for($i=0;$i < $let_amount;$i++) //То же самое для основных букв
    {
    $color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],
    $colors[rand(0,sizeof($colors)-1)],
    $colors[rand(0,sizeof($colors)-1)],rand(20,40));
    $letter = $letters[rand(0,sizeof($letters)-1)];
    $size = rand($font_size*2-2,$font_size*2+2);
    $x = ($i+1)*$font_size + rand(1,5); //Даем каждому символу случайное смещение
    $y = (($height*2)/3) + rand(0,5);
    $cod[] = $letter; //Запоминаем код
    imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
    }
    $cod = implode("",$cod); //Переводим код в строку
    session_start();
    $_SESSION['code']=$cod;
    header ("Content-type: image/gif"); //Выводим готовую картинку
    imagegif($src);
    ?>

    2. Код вывода капчи:
    Code

    <html>
    <head>
    </head>
    <img src="captcha.php" /><a href="#" onclick="document.getElementById('cap').src = 'captcha.php?nocash='+Math.random(); return false;">Обновить</a>
    <form action="check.php" method="POST">
    <input type="text" name="captcha_code">
    <input type="submit" value="Отправить" name="req">
    </form>
    </html>

    3. Создаем файл check.php:
    Code

    <?php
    session_start();
    $code=$_SESSION['code'];
    if($_POST['captcha_code']=="" || $_POST['captcha_code']==" ")
    {
    die("Введите символы!");
    }
    else
    {
    $p_code=$_POST['captcha_code'];
    if($p_code!=$code)
    {
    die("Неверно введены символы!");
    }
    else
    {
    //Тут делаем все что должно быть,
    //если капча введена верно
    //например, echo "Сообщение отправлено";
    }
    }
    ?>

    Можно полностью менять количество символов, размер шрифта, сам шрифт, размер картинки и т.д.

    Пример вывода:
    [IMG]
     
Loading...
Top