4
Фев

Как сделать капчу (captcha) php для сайта

Для защиты сайта от регистрации ботов используют так называемый тест Тьюринга. В простонародии он называется капча (CAPTCHA). Я решил сделать капчу (captcha) используя php. Об этом и пойдёт разговор в этой заметке.

Что же по сути такое тест Тьюринга. А это проверка, является ли пользователь живым человеком или ботом. Устанавливается задача, которую человек решит легко, а для программного решения потребуется очень много ресурсов. Обычно задачей является распознавание текста на картинке. Для усложнения распознования картинки с помощью компьютера добавляют к изображению дополнительные линии и шумы. Исходя из выше изложенной информации, напрашивается вывод, что мы должны научиться генерировать изображения с помощью php. Для работы с графикой в php существует библиотека GD2. Давайте сначала её подключим и разберёмся как с её помощью сделать captcha для сайта.

Подключение библиотеки GD2 к PHP

Находим в папке: C:\Program Files\PHP\ext файл php_gd2.dll (это и есть библиотека), и копируем в c:\windows . В файле c:\windows\php.ini находим строку extension=php_gd2.dll и раскоментируем. Не забываем перезапустить apache. У меня веб сервер apache стоит на windows. заметка как я его ставил. Так что процесс установки GD2 может у вас отличаться от моего. Теперь давайте разберём основные функции GD2.

Функции библиотеки GD2 PHP Создание и генерация изображения Рисование Функция Что функция делает
imageAntiAlias($myimg, true) Сглаживание (antialiasing)
$mycolor = imageColorAllocate($myimg, 255, 0, 0) Определение цвета
imageLine($myimg, 25, 25, 70, 290, $mycolor); Рисуем линии, цифры это координаты точек
imageRectangle($myimg, 25, 25, 70, 290, $mycolor); Рисуем прямоугольник, цифры это координаты углов
imageFilledRectangle ($myimg, 20, 20, 65, 295, $mycolor); Заливка фона
$points = array(0,0,110,210,310,210); imagePolygon($myimg, $mypoints, 3, $mycolor); imageFilledPolygon ($myimg, $mypoints, 3, $mycolor); Рисуем многоугольник
imageEllipse ($myimage, 200, 150, 300, 200, $color); Рисуем эллипс. Первые 2е цифры координаты центра эллипса, 2е 2е высота и ширина эллипса (x, y)
imageString ($myimage, 3, 130, 350, "Hai", $mycolor); Рисуем строку текста. 1я цифра размер шрифта (max 5)
imageTtfText ($myimg, 30, 10, 310, 160, $mycolor, "my.ttf", "Hai"); Рисуем строку текста. Применяем TrueType-шрифты. 1я цифра размер шрифта, 2я угол наклона, 3-4 координаты бокса, шрифт, текст
$myimg = imageCreateFromJPEG("myimage.jpg"); $myimg = imageCreateFromGIF("myimage.gif"); $myimg = imageCreateFromPNG("myimage.png"); Делаем новое изображения на базе имеющегося
Создание капчи (captcha) php

Теперь мы обладаем нужной информацией для создания капчи (captcha) php. Я написал свой небольшой класс, который генерирует картинку капчи. Файл с классом называется mycaptcha.php . Листинг ниже.