例
以下の例では CAPTCHA の一般的な使用法を説明します。
CAPTCHA が正しく解決された場合にのみ、フォームから送信された内容を
処理します。
以下のコードは CAPTCHA を作成し、必要な情報を提供し、
その CAPTCHA を PNG 画像として取得します。
<?php
require_once 'Text/CAPTCHA.php';
// CAPTCHA のオプションを設定します (フォントが存在する必要があります!)
$imageOptions = array(
'font_size' => 24,
'font_path' => './',
'font_file' => 'COUR.TTF',
'text_color' => '#DDFF99',
'lines_color' => '#CCEEDD',
'background_color' => '#555555'
);
// CAPTCHA のオプションを設定します
$options = array(
'width' => 200,
'height' => 80,
'output' => 'png',
'imageOptions' => $imageOptions
);
// 新しい Text_CAPTCHA オブジェクトを Image ドライバで作成します
$c = Text_CAPTCHA::factory('Image');
$retval = $c->init($options);
if (PEAR::isError($retval)) {
printf('CAPTCHA 作成時にエラー: %s!',
$retval->getMessage());
exit;
}
// CAPTCHA のパスフレーズを取得します
$_SESSION['phrase'] = $c->getPhrase();
// CAPTCHA 画像を (PNG 形式で) 取得します
$png = $c->getCAPTCHAAsPNG();
if (PEAR::isError($png)) {
echo 'CAPTCHA 作成時にエラー!';
echo $png->getMessage();
exit;
}
file_put_contents(md5(session_id()) . '.png', $png);
?>
CAPTCHA を使用してフォームのセキュリティを確保する
以下の例では、CAPTCHA が正しく解決されたかどうかを確認する機能を
実装しています。リクエスト間で情報を保持し続けるため、ここでは
CAPTCHA の文字列をセッション変数に格納しています。いったん
CAPTCHA が解決された後は、セッション ID の再利用を避けるために
このセッション変数を消去しておくことが大切です。
<?php
session_start();
$ok = false;
$msg = '下の画像の中の文字列を入力してください!';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['phrase']) && is_string($_POST['phrase']) && isset($_SESSION['phrase']) &&
strlen($_POST['phrase']) > 0 && strlen($_SESSION['phrase']) > 0 &&
$_POST['phrase'] == $_SESSION['phrase']) {
$msg = 'OK!';
$ok = true;
unset($_SESSION['phrase']);
} else {
$msg = 'もう一度入力してください!';
}
unlink(md5(session_id()) . '.png');
}
print "<p>$msg</p>";
if (!$ok) {
// 上の例で見たようにして CAPTCHA を作成し、
// クライアントに送信します
}
?>
ひととおり完全に動作するサンプルは、配布パッケージ内の
CAPTCHA_test.php を参照ください
(GD および TTF のサポートが必要です)。