캡챠 CAPTCHA Helper

캡챠 헬퍼는 캡챠 이미지를 만드는 데 유용한 함수로 구성되어 있습니다.

헬퍼 로딩 Loading this Helper

다음 코드를 사용하여 로드합니다:

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

캡챠 헬퍼 사용 Using the CAPTCHA helper

로드하고 나면 캡챠를 다움과 같이 생성할 수 있습니다:

$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_pathimg_url은 필수입니다.
  • word를 지정하지 않으면 임의의 ASCII 문자열이 생성됩니다. 여러분의 워드 라이브러리를 함께 사용해도 좋습니다.
  • 트루타입 글꼴 경로가 지정되지 않으면 표준보기 흉한 GD 글꼴이 사용됩니다.
  • “captcha”디렉토리는 쓰기 가능해야 합니다.
  • expiration(단위 : 초) captcha가 삭제될 때까지 시간입니다. 기본적으로 2 시간입니다.
  • 문자길이 는 기본적으로 8글자 입니다. 기본적으로 ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’ 가 사용됩니다
  • 글자 크기는 기본적으로 16입니다, 원래의 GD 폰트는 크기 제한이 있습니다. 더 큰 폰트 사이즈를 위해 “트루 타입” 을 지정해주세요.
  • img_id 는 캡챠 이미지의 “id”로 세팅될 것입니다.
  • colors 값을 찾지 못하면, 기본값으로 세팅될 것입니다.

데이터베이스 추가 Adding a Database

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.';
}

사용 가능한 함수들 Available Functions

아래 함수가 사용 가능합니다:

create_captcha([$data = ''[, $img_path = ''[, $img_url = ''[, $font_path = '']]]])
인수:
  • $data (array) – Array of data for the CAPTCHA
  • $img_path (string) – Path to create the image in
  • $img_url (string) – URL to the CAPTCHA image folder
  • $font_path (string) – Server path to font
반환값:

array(‘word’ => $word, ‘time’ => $now, ‘image’ => $img)

반환형:

array

배열로 캡챠 생성을 위한 정보를 받아, 이미지에 관한 연관 데이터의 배열을 반환하며 이미지를 생성합니다.

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

실제 이미지 태그입니다:

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

time 값은 파일 확장자를 제외한 이미지 이름으로 사용된 micro timestamp 입니다. 다음과 같은 숫자 형식입니다 : 1139612155.3422

word 값은 캡챠이미지에 나타나는 문자입니다. 입력값이 없으면 임의의 문자열이 생성됩니다.