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 слово, которое будет на картинке, если не передано - будет случайная строка.