reCAPTCHAのアカウント登録からCodeIgniterでの開発方法をまとめます。
動作するサンプルを最後のほうに記載しています。
reCAPTCHAとは
reCAPTCHAはGoogleが提供している無償のCAPTCHA(キャプチャ)サービスです。
CAPTCHAとは、読みにくく加工した文字を表示してその文字をユーザーに入力してもらうことでWebサイトを利用しているユーザーが人間であるかどうかを判断する仕組みです。
掲示板やアカウント登録でスパムを防止したいときに便利です。
reCAPTCHAのアカウント登録
下記のURLからアカウント登録を行います。

「USE reCAPTCHA ON YOUR SITE」をクリックします。
「Sign up Now!」をクリックします。

Googleのアカウントでサインインします。
DomainへreCAPTCHAを利用するドメインを入力してCreate Keyをクリックします。
ここではブログのドメイン「iw3.me」を入力しています。
これでアカウントの登録は完了です。
作成されたPublic KyeとPrivate Keyは後で使います。
RECaptcha-for-Codeigniter
CodeIgniterからreCAPTCHAを利用するためのライブラリー(RECaptcha-for-Codeigniter)がGitHubに公開されていたのでこちらを利用しました。
下記のページの「ZIP」ボタンからzip形式でダウンロードできます。
解凍するとconfigとlibrariesフォルダにそれぞれphpファイルがあるので、CodeIgniterのapplicationフォルダ配下の同名のディレクトリに置きます。
| application | ||
| │ | ||
| ├ | config | |
| │ | └ | recaptcha.php |
| │ | ||
| └ | libraries | |
| └ | Recaptcha.php | |
config/recaptcha.phpを設定
さきほどreCAPTCHAで作成したPublic KyeとPrivate Keyを設定します。
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* reCaptcha File Config
*
* File : recaptcha.php
* Created : May 14, 2013 | 4:22:40 PM
*
* Author : Andi Irwandi Langgara <irwandi@ourbluecode.com>
*/
$config['public_key'] = '6Ldxq-ISAAAAAA6zPZ7bMOhOQhMmb-PVie53Ttnk';
$config['private_key'] = '6Ldxq-ISAAAAANDbfkESdFEKbuafUjpa8vCFw6Cb';
?>
Controllerを作成
recaptcha_get_html()メソッドからreCAPTCHAを表示するスクリプトが取得できるので、そのままViewに渡しています。View側でこの内容を出力することでreCAPTCHAが表示されます。
submit()メソッドではrecaptcha_check_answer()メソッドでユーザーの入力値を渡して、getIsValid()メソッドで入力が正しいかどうか判断しています。
※ 通常recaptchaライブラリーを使用する前に「$this->load->library(‘recaptcha’)」として読み込む必要がありますが、このソースコードではControllerに宣言しているライブラリー名をMY_Controllerが取得して読み込み処理を行なっています。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class RecaptchaLogin extends MY_Controller {
// ------------------------------------------------------------------------
// インスタンス変数
// ------------------------------------------------------------------------
/**
* ヘルパー
* @var array
*/
protected $helpers = array(
'form',
'url',
);
/**
* ライブラリー
* @var array
*/
protected $librarys = array(
'recaptcha',
);
// ------------------------------------------------------------------------
// コンストラクター
// ------------------------------------------------------------------------
/**
* コンストラクター
*/
public function __construct() {
parent::__construct();
}
// ------------------------------------------------------------------------
// 公開メソッド
// ------------------------------------------------------------------------
/**
* index
*/
public function index() {
$data['recaptcha_html'] = $this->recaptcha->recaptcha_get_html();
$this->load->view('v_recaptchaLogin', $data);
}
/**
* submit
*/
public function submit() {
$remoteAddr = $_SERVER['REMOTE_ADDR'];
$challenge = $this->input->post('recaptcha_challenge_field');
$response = $this->input->post('recaptcha_response_field');
$this->recaptcha->recaptcha_check_answer($remoteAddr, $challenge, $response);
if ($this->recaptcha->getIsValid()) {
$this->session->set_flashdata('msg','成功!');
} else {
$this->session->set_flashdata('msg','失敗。');
}
redirect('2013/recaptchaLogin');
}
}
/* End of file recaptchaLogin.php */
/* Location: ./application/controllers/recaptchaLogin.php */
Viewを作成
Controllerから提供された$recaptcha_htmlをそのまま出力します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>reCAPTCHA for CodeIgniter</title>
</head>
<body>
<?php echo form_open('2013/recaptchaLogin/submit'); ?>
<?php echo $recaptcha_html; ?>
<?php echo form_submit('submit', '認証'); ?>
<?php echo form_close(); ?>
<?php echo $this->session->flashdata('msg'); ?>
</body>
</html>
reCAPTCHAのサンプル
CodeIgniterのバージョン
1.7.2と2.0.3で動作することが確認できています。






コメント