CAPTCHA Helper
Файл CAPTCHA Helper содержит функции, которые помогают создавать изображения 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',
// White background and border, black text and red grid
'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 (в секундах) определяет, как долго изображение будет храниться в папке captcha, прежде чем будет удалено. По умолчанию — два часа.
- 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, у вас будет что-то вроде этого:
$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 '<input type="text" name="captcha" value="" />';
Затем на странице, принимающей отправку, у вас будет что-то вроде этого:
// First, delete old captchas
$expiration = time() - 7200; // Two hour limit
$this->db->where('captcha_time < ', $expiration)
->delete('captcha');
// Then see if a captcha exists:
$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" />
time — микросекундное временное значение, используемое в качестве имени изображения без расширения файла. Это будет число, подобное этому: 1139612155.3422
word — слово, отображаемое на изображении CAPTCHA. Если функция не получает значение для word, она сгенерирует случайную строку.
Примечание
Использование параметров
$img_path,$img_urlи$font_pathустарело. Укажите их в массиве$data.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/helpers/captcha_helper.html