画像認証(CAPTCHA)

仕事で必要だったので画像認証(CAPTCHA)とか簡単に使えるスクリプトないかなーと探してました

色々あったんですが、ライセンスがどうとか色々言われそうだったので作ってみました。

と、言ってもサンプルコピペに近いですけど。

PEARにText_CAPTCHAってのがあったのでそれ使ってやってみます。

PHPはGDとttfをサポートしていないと使えないので注意してね!

まずPEARインストールでText_CAPTCHAを取得
依存関係の奴も全部

pear install  -a Text_CAPTCHA

ってやったら

Failed to download pear/Text_CAPTCHA within preferred state "stable", latest release is version 0.4.0, stability "alpha", use "channel://pear.php.net/Text_CAPTCHA-0.4.0" to install
install failed

とかって怒られたので

pear install -a channel://pear.php.net/Text_CAPTCHA-0.4.0

で取得
alphaバージョンとかbetaバージョンは普通にインストールできないので、バージョン番号まで入れろって事です

で、phpをファイルを以下のような感じで作ると

<?php
require_once ("Text/CAPTCHA.php");
$CAPTCHA = Text_Captcha::factory('Image');
//locate .ttfとかやって適当にフォントファイルのパスを見つけて指定してあげてね!
//ちゃんとあるフォントファイル指定してあげてね!
$CAPTCHA->init(200, 70, null, array(
	'font_size' => 22,
	'font_path' => '/usr/share/fonts/japanese/TrueType/',
	'font_file' => 'sazanami-mincho.ttf'
	)
);
$img = $CAPTCHA->getCAPTCHAAsPNG();
//セッションに保存するとかしてね!
$_SESSION['captcha_pass'] = $CAPTCHA->getPhrase();
header('Content-type: image/png');
echo $img;
exit;

ってファイルを作ってやってそのファイルにアクセスしてみる

すると以下のような画像ができるはず!

セッションに保存したフレーズを次のページに遷移するときに、ユーザーが入力した値と比べて
きちんと認証されているか確認してね!

セッションに保存したフレーズは1回できちんと消すようにしないとだめだよ!

セッションにフレーズが保存されていない場合の処理も書かないと、認証スルーするかもしれないから注意だよ!
とかとか、適当にできるっぽいです。