CAPTCHA Хелпер  

Вспомогательный файл содержит функции, которые помогают в работе при создании изображений CAPTCHA.

Загрузка помощника  

Этот помощник загружается, используя следующий код:



$this->load->helper('captcha');

Использование CAPTCHA Хелпера  

Загрузив хелпер CAPTCHA с ним можно работать так:

$vals = array(
        'word'          => 'Random word',
        'img_path'      => './captcha/',
        'img_url'       => 'http://example.com/captcha/',
        'font_path'     => './path/to/fonts/texb.ttf',
        'img_width'     => '150',
        'img_height'    => 30,
        'expiration'    => 7200,
        'word_length'   => 8,
        'font_size'     => 16,
        'img_id'        => 'Imageid',
        'pool'          => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',

        // Белый фон и бодер, черный текст и красная сетка
        'colors'        => array(
                'background' => array(255, 255, 255),
                'border' => array(255, 255, 255),
                'text' => array(0, 0, 0),
                'grid' => array(255, 40, 40)
        )
);

$cap = create_captcha($vals);
echo $cap['image'];
  • Captcha функции требуют наличия GD библиотеки.
  • Обязательные только img_path и img_url.
  • Если word (слово) не поддерживается, функция создаст произвольную ASCII строку. Вы можете составить свою собственную библиотеку слов и использовать их.
  • Если Вы не укажите путь к TRUE TYPE шрифту, удет использоваться родной уродливый GD шрифт.
  • Директория “captcha” должна быть доступна для записи
  • expiration (срок жизни в секундах) показывает как долго изображение будет храниться в папке капчи, прежде чем оно будет удалено. По умолчанию два часа.
  • word_length - длина слова по умолчанию 8, pool - список символов по умолчанию ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
  • font_size - размер шрифта по умолчанию 16, родноый GD шрифт имеет ограничение по размерам. Укажите “true type” шрифт для больших размеров.
  • img_id будет задан как “id” изображения captcha.
  • Если какой-либо из colors (цветов) отсутствует, будет заменен на цвет по умолчанию.

Добавление базы данных  

Для того, чтобы предотвратить подтверждение функции captcha, вам нужно будет добавить сведения, полученные от create_captcha() в базу данных. Затем, когда данные из формы предоставлены, необходимо убедиться в наличии данных в базе данных и что они не истекли.

Вот прототип таблицы:

CREATE TABLE captcha (
        captcha_id bigint(13) unsigned NOT NULL auto_increment,
        captcha_time int(10) unsigned NOT NULL,
        ip_address varchar(45) NOT NULL,
        word varchar(20) NOT NULL,
        PRIMARY KEY `captcha_id` (`captcha_id`),
        KEY `word` (`word`)
);

Вот пример использования CAPTCHA с базой данных. На странице с CAPTCHA следует разместить код аналогичный этому:

$this->load->helper('captcha');
$vals = array(
        'img_path'      => './captcha/',
        'img_url'       => 'http://example.com/captcha/'
);

$cap = create_captcha($vals);
$data = array(
        'captcha_time'  => $cap['time'],
        'ip_address'    => $this->input->ip_address(),
        'word'          => $cap['word']
);

$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);

echo 'Submit the word you see below:';
echo $cap['image'];
echo '';

Затем на странице, которая принимает данные, будет что-то вроде этого:

// Сначала удаляем старые captcha
$expiration = time() - 7200; // Two hour limit
$this->db->where('captcha_time < ', $expiration)
        ->delete('captcha');

// Затем проверяем на существование:
$sql = 'SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?';
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();

if ($row->count == 0)
{
        echo 'You must submit the word that appears in the image.';
}

Доступные функции  

Доступны следующие функции:

create_captcha([$data = ''[, $img_path = ''[, $img_url = ''[, $font_path = '']]]])  
Параметры:
  • $data (массив) – Массив данных CAPTCHA
  • $img_path (строка) – Путь к папке в которой будет создано изображение
  • $img_url (строка) – URL к папке с CAPTCHA изображениями
  • $font_path (строка) – Путь к изображениям на сервере
Возвращает:

массив(‘word’ => $word, ‘time’ => $now, ‘image’ => $img)

Возвращаемый тип:

массив

Принимает массив данных для создания CAPTCHA в качестве входных данных и создает изображения по вашим спецификациям, возвращая ассоциативный массив данных об изображении.

array(
        'image' => IMAGE TAG
        'time'  => TIMESTAMP (in microtime)
        'word'  => CAPTCHA WORD
)

image фактический тег изображения:

<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
< /div>

time временная метка, используемая в качестве имени изображения без расширения файла. Например: 1139612155.3422

word слово, которое будет на картинке, если не передано - будет случайная строка.