Spec-Zone.ru › CodeIgniter 3

CAPTCHA Helper

Файл CAPTCHA Helper содержит функции, которые помогают создавать изображения 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',

        // 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API