Здесь можно найти всё что Вам нужно! ⇒

Почта techsupport@web-rubik.ru

Скрипт капчи своими руками который работает на PHP-7, готовое решение капчи дл сайта

Автор: © web-rubik

Создание капчи для сайта самостоятельно работающей на PHP 7-ой серии.


Давно ничего не писал, но с переводом сайта на PHP-7 много чего перестало работать, капча в том числе, о чем и будет посвящена данная статья. У меня был встроен готовый скрипт капчи, который был написан не мною, и он отказывался работать как бы я его только не крутил. В итоге, я решил построить скрипт капчи своими руками, который работал бы на PHP 7-ой серии.
Алгоритм должен быть довольно простым, но в то же время сложен для программ взлома. На мой взгляд, лучший вариант, это изображение. Нам понадобится создать изображение, да ещё и запомнить значение, которое будет отображаться в нём. Для этого мы воспользуемся языком PHP и создадим файл, который будет нам всё это делать, назовём его capcha.php



<?php // Файл capcha.php
//Переменная, в которой храниться список символов. используемых в капче
$let = '0123456789';  
// количество символов в капче
$len = 4;
// шрифт символов на капче( путь должен быть обязательно обсалютным! )
$font = $_SERVER['DOCUMENT_ROOT'].'/impact.ttf'; 
// Размер шрифта 
$fontsize = 20; 
// Размер капчи ( картинки )
$width = 100; // - длина
$height = 30; // - высота
 
// Задаем заголовок для вывода картинки
header('Content-type: image/png');  
// Создаем изображение
$img = imagecreatetruecolor($width, $height);  
// фон для капчи
$white = imagecolorallocate($img, 220, 220, 220); 
imagefill($img, 0, 0, $white); 
// Переменная, для хранения значения капчи
$capchaText = '';

// Заполням изображение линиями
$line_color = imagecolorallocate($img, 64,64,64);
for ($i=0;$i<10;$i++) { imageline($img,0,rand()%50,200,rand()%50,$line_color); }
// Заполням изображение точками
$pixel_color = imagecolorallocate($img, 0,0,255);
for ($i=0;$i<1000;$i++) { imagesetpixel($img,rand()%200,rand()%50,$pixel_color); }
 
// Заполням изображение символами
for ($i = 0; $i < $len; $i++) { 
    // Из списка символов, берем случайный символ 
    $capchaText .= $let[rand(0, strlen($let)-1)];  
    // Вычесляем положение одного символа
    $x = ($width - 20) / $len * $i + 10; 
    $y = $height - (($height - $fontsize) / 2);     
    // Укажем случайный цвет для символа. 
    $color = imagecolorallocate($img, rand(0, 150), rand(0, 150), rand(0, 150) );  
    // Генерируем угол наклона символа 
    $naklon = rand(-30, 30);  
    // Рисуем символ
    imagettftext($img, $fontsize, $naklon, $x, $y, $color, $font, $capchaText[$i]); 
}
 
// Запускаем сессию, и записываем в нее значение капчи. Это понадобится для проверки с тем, что вводит юзер
session_start(); 
$_SESSION['capcha'] = $capchaText; 
// вывод капчи на страницу
imagepng($img);  
// чистим память, корторую мы заняли при создании картинки
imagedestroy($img);
?>

Нам осталось вывести изображение в форме, сделать кнопку смены изображения и сравнить значение в скрипте обработчике.



<?php // Скрипт обработчик
// старт сессии
session_start(); 


// Сравниваем введенную капчу с тем, что храниться в сессии
if($_SESSION['capcha'] == $_POST['capcha']){
    echo 'Капча верная';
}else {
    echo 'Капча не верная';
}

// Удаляем значение капчи из сессии 
unset($_SESSION['capcha']);
?>
<!doctype html>
<html lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    <title>Капча</title>
    
    <script src="jquery.js"></script>
</head>
<body>
    <!-- Основное содержимое -->
    <article>
        <form method="post">
            <img id="img" src="capcha.php" width="100" height="30" />
            <img id="update" 
                 src="update.png" 
                 width="16" 
                 height="16" 
                 style="padding-bottom:5px; padding-left:5px; cursor:pointer;" 
                 title="Обновить" 
                 onclick="document.getElementById('img').src = 'capcha.php?' + Math.random()">
             <br />
            <input name="capcha" type="text" placeholder="Код с картинки *" required="">
            <input type="submit" value="Отправить" />
        </form>
    </article>
    <script> $('#img').attr('src', 'capcha.php?r=' + Math.random()); </script>
</body>
</html>

В исходниках я положил файлы шрифта impact.ttf и библиотеки JQuery jquery.js, она нам понадобится для смены изображения на новое.
Что не понятно пишите в комментариях.



Понравилось 7  

Комментариев нет или


Оставить комментарий

Оставленные комментарии проверяются технической частью интернет портала Web-rubik.ru



←−−−