Использование SimpleCAPTCHA

1.
Вначале необходимо установить нужную внешнюю библиотеку.
NumbersWords — это пакет библиотеки PEAR для преобразования чисел в слова;
он будет использован, чтобы усложнить автоматическим сценариям просмотр
форм и вычисление результатов. Официальная страница пакета — http://
pear.php.net/package/Numbers_Words.
У PEAR имеется простой инсталляционный сценарий. Откройте в окне командной
строки папку, в которой находится файл pear.php. Если вы воспользовались
ХАМРР, как было описано в главе 1, то это должна быть папка Program
Files\xampp\php. Чтобы войти в эту папку, введите команду

Теперь окно командной строки должно выглядеть так, как показано на рис. 8.10.
C:WflNOOWS\»y!t«ii32\cnid.e)«
licrosaft Windows HP
(С) Корпорация Майкрософт, 1985-2001.

2. Загрузите
в какой-нибудь каталог (допустим, C:\Downloads) инсталляционный
архив Numbers_Words со страницы http://pear.php.net/package/
Numbers_Words/download, распакуйте его, скопируйте в папку С: \Downloads\
Numbers_Words-0 .15.0 файл package. xml, а затем введите в окне командной
строки команду:
pear install C:\Downloads\Numbers_Words-0.15.0\package.xml
На экране должна появиться информация о распаковке:
install ok: channel://pear.php.net/Numbers_Words-0.15.О
После этого окно командной строки можно закрыть.
3. Создайте в папке
seophp/include файл с именем simple_captcha. inc.php и
поместите в него следующий код:
<?php
// загруэха библиотеки Words
require_once('Numbers/Words.php');
// библиотека SimpleCAPTCHA
class SimpleCAPTCHA
{
// проверка ответа
function check_answer($answer, $hash)
{
return (md5(trim($answer) . $_SERVER['SERVER_ADDR']) = $hash);
}
// генерация вопроса
function get_question($max_l, $max_2)
{
// определение стандартных форматов вопросов
$question_formats = array (
'Сколько будет %s плюс %s?',
'Какова сумма %s и %s?',
'Сколько будет %s добавить %s?',
'Сколько будет %s + %s?'
);
// генерация случайных чисел
$number_l = rand(0, $max_l);
$number_2 = rand(0, $max_2);
// преобразование чисел в слова
$number_l_words = Numbers_Words::toWords($number_l);
$number_2_words = Numbers_Words::toWords($number_2);
// генерация случайного вопроса
$question = sprintf ($question_formats [rand (6,
sizeof($question_formats) -1)],
$number_l_words,
$number_2_words);
// возврат вопроса и хеша результата
return array ('question' => $question,_
'hash' => md5((Snumber 1 + $number_2) . $_SERVER['SERVER_ADDR']));
}
// генерация демо-формы
function display demo_form ()
< $gq = SimpleCAPTCHA::get_guestion(1000, 10);
echo '';
echo $gq['question'];
echo '';
echo '';
echo '';
)
4. Измените файл comments .php следующим образом:
<?php
// загрузка библиотеки nofollow
require_once 'include/nofollow.inc.php';
// загрузка библиотеки sanitize
require_once 1 include/sanitize.inc.php';
// загрузка простой библиотеки CAPTCHA
require_once 'indude/simple_captcha.inc.php';
// вывод третьего комментария
$inHTML = '<р>3ачистка !';
echo sanitizeHTML($inHTML);
// вывод вопроса CAPTCHA
SimpleCAPTCHA::display_demo_form();
// вывод ответа
if (isset($_GET['response']) && isset($_GET['hash']))
{
if(SimpleCAPTCHA::check_answer($ GET['response'], $_GET['hash']))
{
echo 'Правильно!';
>
else
{
echo 'Ответ неверен!';
>

5. Загрузите страницу http: //seophp. example. com/comments. php и введите ответ
в текстовое поле, как показано на рис. 8.11 (чтобы не переделывать код,
числа отображаются по-английски; в своей реализации вы можете написать собственный или найти в Интернете готовый код вывода чисел прописью по-русски
— Примеч. пер.).
6. После нажатия на клавишу должно появиться сообщение, верен ваш ответ или нет (рис. 8.12).
Эта простая библиотека CAPTCHA позволяет довольно легко определить "человечность" пользовательского агента, прежде чем принять от него комментарий.
Этот небольшой сценарий не на 100% надежен. Его можно усовершенствовать, реализовав более сложный механизм наподобие искаженных изображений. Но все же он достаточно хорошо справляется со своими обязанностями и вполне пригоден для применения в небольших Web-сайтах.
Чтобы выводить, на странице вопросы САРТСНА, необходимо включить простую библиотеку САРТСНА, а затем где-то на странице вызвать метод display_demo_f orm ():
// вывод вопроса САРТСНА
SimpleCAPTCHA::display_demo_form();
При этом будет сгенерирована примерно такая форма:
Сколько будет шестьсот пятьдесят семь + пять?
'

Скрытое поле с именем hash содержит хеш правильного ответа.