以下の例では CAPTCHA の一般的な使用法を説明します。 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']) > && strlen($_SESSION['phrase']) > &&
        
$_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 のサポートが必要です)。

導入 (Previous) CAPTCHA およびその内部動作についての情報 (Next)
Last updated: Thu, 31 Jul 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: fusco
This example uses md5 encryption for unlink() image. Note that the captcha_test.php uses SHA1.

The previous comment suggests using /usr/share/fonts as the default font location. An easier solution maybe to upload the TTF to your web root.

For shared servers, this may be helpful to include PEAR extensions. To define another include directory:

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . '/file/path/to/files/');

Setting the width and height parameters for the image tag is best for most browsers [img src='' width=200 height=80]
Note by: alan_k
On a standard Unix system, this would be a better initializer (as the font location is more likely to be correct)

$retval = $c->init(array(
'width' => 200,
'height' => 80,
'output' => 'png',
'imageOptions' => array(
'font_size' => 24,
'font_path' => '/usr/share/fonts/truetype/msttcorefonts/',
'font_file' => 'Arial.ttf',
'text_color' => '#DDFF99',
'lines_color' => '#CCEEDD',
'background_color' => '#555555'
)
));