Звуковая капча
В свете последних событий нарыл такую штуку, решил поделиться с сообществом.
Оригинальная статья на английском, поэтому здесь — только вольный перевод.
Значит так. Что заиметь у себя одновременно и графическую, и звуковую капчу, нужно для начала всё это дело скачать. Потом скопировать себе в удобное место и читать дальше. Кстати, лицензия у этой радости — 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(); ?>
Получилась картинка:
Да здравствуют полезные и удобные ресурсы! =).