Pull to refresh

Звуковая капча

Reading time3 min
Views4.1K
В свете последних событий нарыл такую штуку, решил поделиться с сообществом.
Оригинальная статья на английском, поэтому здесь — только вольный перевод.

Значит так. Что заиметь у себя одновременно и графическую, и звуковую капчу, нужно для начала всё это дело скачать. Потом скопировать себе в удобное место и читать дальше. Кстати, лицензия у этой радости — BSD. Кто понимает, тот выбирает =).


В директории со скачанным скриптом самым главным является файл php-captcha.inc.php. Его будем подключать везде. Кроме того, понадобятся шрифты TrueType. Если под рукой их нет, можно скачать откуда-нибудь.

Собственно, процесс. Графическая капча. Пишем сие в файл visual-captcha.php.
<?php
    require('php-captcha.inc.php');
    $aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf');
    $oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60);
    $oVisualCaptcha->Create();
?>


Звуковая капча идёт в audio-captcha.php.
<?php
    require('php-captcha.inc.php');
    $oAudioCaptcha = new AudioPhpCaptcha('/usr/bin/flite', '/tmp/');
    $oAudioCaptcha->Create();
?>

/tmp — место временного хранения созданного файла.

Здесь стоит приостановиться и заметить, что был использован некий бинарник flite. Его, как нетрудно догадаться, необходимо предварительно скачать и протестировать.
flite -t 'Hello World' -o hello.wav


Как теперь отобразить созданное в документе?
<p><img src="visual-captcha.php" width="200" height="60" alt="Visual CAPTCHA" /></p>
<p><a href="audio-captcha.php">Can't see the image? Click for audible version</a></p>
Здесь автор отдельно отмечает, что необходимо звуковую капчу втыкать после графической. Это для корректного создания рандомного кода.

Всё, капча создана и отображается. Как теперь проверить пришедшего клиента?
<?php
    require('php-captcha.inc.php');
    if (PhpCaptcha::Validate($_POST['user_code'])) {
        echo 'Valid code entered';
    } else {
        echo 'Invalid code entered';
    }
?>
Важно то, что метод Validate вызывается статически.

Вот, собственно, и всё. В качестве бонуса — некоторые возможности по конфигурированию создаваемой капчи.
SetWidth(int iWidth) — задать ширину картинки. По умолчанию 200px.
SetHeight(int iHeight) — задать высоту картинки. По умолчанию 50px.
SetNumChars(int iNumChars) — число выводимых символов. По умолчанию 5.
SetNumLines(int iNumLines) — число шумовых линий. По умолчанию 70.
DisplayShadow(bool bShadow) — отображать или нет тени элементов.
SetOwnerText(sting sOwnerText) — текст «владелец», отображаемый внизу картинки. Предназначен для того, чтобы ваши капчи не отдавали на слом леммингам.
SetCharSet(variant vCharSet) — набор символов, используемых в капче. По умолчанию A-Z. Можно задавать массивом символов, например array('1', 'G', '3') или строкой символов, или даже диапазоны символов, например 'a-z,A-Z,0,3,7'.
CaseInsensitive(bool bCaseInsensitive) — проводить проверку с учётом регистра символов, или без. Если установлено в «false», нужно передать «false» вторым параметром в функцию «Validate» при проверке введённого кода.
SetBackgroundImages(variant vBackgroundImages) — определить одно (string) или несколько (array) картинок, которые будут отображаться вместо шумовых линий. При задании нескольких изображений, библиотека рандомно выбирает одно.
SetMinFontSize(int iMinFontSize) — минимальный отображаемый размер шрифта. По умолчанию 16.
SetMaxFontSize(int iMaxFontSize) — максимальный отображаемый размер шрифта. По умолчанию 25.
UseColour(bool bUseColour) — при установке в «true» отображает шумовые линии и символы рандомными цветами.
SetFileType(string sFileType) — выходной формат: jpeg, gif или png. По умолчанию jpeg.

Все конфигурационные параметры необходимо задавать перед вызовом Create().
Пример вызова и цветная картинка.
<?php
    require('php-captcha.inc.php');
    $aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf');
    $oPhpCaptcha = new PhpCaptcha($aFonts, 200, 50);
    $oPhpCaptcha->UseColour(true);
    $oPhpCaptcha->Create();
?>


Получилась картинка:


Да здравствуют полезные и удобные ресурсы! =).
Tags:
Hubs:
+19
Comments19

Articles