# CAPTCHA アダプタ

次のアダプタが、Zend Framework に同梱されています。

## Zend_Captcha_Word

`Zend_Captcha_Word` は抽象アダプタで、 その他の大半の CAPTCHA アダプタの基底クラスとなります。 指定できる機能は、単語の長さやセッションの有効期限、 使用するセッション名前空間オブジェクト、 `Zend_Session_Namespace` を使いたくない場合に使用するセッション名前空間クラスです。 `Zend_Captcha_Word` は、すべての検証ロジックをカプセル化します。

デフォルトでは、単語の長さは 8 文字です。またセッションのタイムアウトは 5 分、情報の永続化には `Zend_Session_Namespace` を使用します (使用する名前空間は "`Zend_Form_Captcha_<captcha ID>`" です)。

`Zend_Captcha_Adapter` インターフェイスのメソッドのほかに、 `Zend_Captcha_Word` は次のメソッドを公開しています。

- `setWordLen($length)` と `getWordLen()` で、生成される "単語" の文字数を設定したり現在の値を取得したりします。

- `setTimeout($ttl)` と `getTimeout()` で、セッショントークンの有効期限を設定したり現在の値を取得したりします。 `$ttl` は秒数で指定します。

- `setSessionClass($class)` と `getSessionClass()` で、 CAPTCHA トークンの永続化に使用する `Zend_Session_Namespace` の実装を設定したり 現在の値を取得したりします。

- `getId()` で、現在のトークン識別子を取得します。

- `getWord()` で、CAPTCHA に使用するために生成した単語を取得します。 まだ生成されていない場合は、まず生成してからそれを返します。

- `setSession(Zend_Session_Namespace $session)` で、CAPTCHA トークンの永続化に使用するセッションオブジェクトを設定します。 `getSession()` で、現在のセッションオブジェクトを取得します。

すべての Word CAPTCHA は、コンストラクタにオプションの配列を渡すことができます。 別の方法として、その配列を `setOptions()` で渡す (あるいは `Zend_Config` オブジェクトを `setConfig()` で渡す) こともできます。 デフォルトで、 wordLen、timeout および sessionClass のキーをすべて使用します。 各具象実装では、それ以外のキーを使用したり 違う方法でオプションを使用したりしているかもしれません。

`Zend_Captcha_Word` は抽象クラスであり、 直接そのインスタンスを作成することはできません。

## Zend_Captcha_Dumb

`Zend_Captch_Dumb` アダプタは、その名が示すとおりのものです。 ランダムな文字列を用意し、それを逆からタイプさせることで検証を行います。 これは CAPTCHA の手法としてはあまりよいものではないので、 テスト用に使うのみにしておきましょう。 あるいは、ほかに手がない場合の最後の手段としてのみ使うようにしましょう。 このアダプタは `Zend_Captcha_Word` を継承しています。

## Zend_Captcha_Figlet

`Zend_Captcha_Figlet` アダプタは、Zend_Text_Figlet を使用して Figlet をユーザに表示します。

コンストラクタに渡されたオプションは、アダプタが使用する `Zend_Text_Figlet` オブジェクトにも渡されます。 使用できる設定オプションについては、 `Zend_Text_Figlet` のドキュメントを参照ください。

## Zend_Captcha_Image

`Zend_Captcha_Image` アダプタは、 生成された単語を受け取ってそれを画像としてレンダリングし、 それをいろいろな方法で歪めて自動判読を困難にします。 これを使用するには、 GD 拡張モジュール を TrueType あるいは Freetype のサポートつきでコンパイルする必要があります。 現在、`Zend_Captcha_Image` アダプタが生成できるのは PNG 画像のみです。

`Zend_Captcha_Image` は `Zend_Captcha_Word` を継承しており、 さらに次のメソッドを公開しています。

- `setExpiration($expiration)` と `getExpiration()` で、 CAPTCHA 画像をファイルシステム上に残す期間を設定します。 通常、これはセッションの有効期間より長くします。 CAPTCHA オブジェクトが起動されるたびにガベージコレクションが働き、 期限切れとなった画像が削除されます。 値は秒数で指定します。

- `setGcFreq($gcFreq)` と `getGcFreg()` で、ガベージコレクションが働く頻度を設定します。ガベージコレクションは、 `1/$gcFreq` 回のコールごとに実行されます。 デフォルトは 100 です。

- `setFont($font)` と `getFont()` で、使用するフォントを指定します。`$font` には、 使用するフォントのパスをフルパス形式で指定する必要があります。 この値を設定しなければ、CAPTCHA の生成時に例外がスローされます。 フォントは必須です。

- `setFontSize($fsize)` と `getFontSize()` で、CAPTCHA を生成する際に使用するフォントのサイズをピクセル単位で設定します。 デフォルトは 24px です。

- `setHeight($height)` と `getHeight()` で、生成される CAPTCHA 画像の高さをピクセル単位で指定します。 デフォルトは 50px です。

- `setWidth($width)` と `getWidth()` で、生成される CAPTCHA 画像の幅をピクセル単位で指定します。 デフォルトは 200px です。

- `setImgDir($imgDir)` と `getImgDir()` で、CAPTCHA 画像を保存するディレクトリを指定します。 デフォルトは "`./images/captcha/`" で、これは起動スクリプトからの相対パスとなります。

- `setImgUrl($imgUrl)` と `getImgUrl()` で、HTML マークアップ時に使用する CAPTCHA 画像への相対パスを指定します。 デフォルトは "`/images/captcha/`" です。

- `setSuffix($suffix)` と `getSuffix()` で、CAPTCHA 画像ファイル名の拡張子を指定します。デフォルトは "`.png`" です。注意: これを変更したからといって、 生成される画像の形式が変わるわけではありません。

上のすべてのオプションは、コンストラクタのオプションとして指定できます。 その際には、メソッド名の先頭の 'set' を取り除いて先頭を小文字にした名前 ("suffix", "height", "imgUrl" など) を使用します。

## Zend_Captcha_ReCaptcha

`Zend_Captcha_ReCaptcha` アダプタは、Zend_Service_ReCaptcha を使用して CAPTCHA の生成と検証を行います。 次のメソッドを公開しています。

- `setPrivKey($key)` と `getPrivKey()` で、ReCaptcha サービスで使用する秘密鍵を指定します。 これはオブジェクトの作成時に指定する必要がありますが、 その後いつでも上書きすることができます。

- `setPubKey($key)` と `getPubKey()` で、ReCaptcha サービスで使用する公開鍵を指定します。 これはオブジェクトの作成時に指定する必要がありますが、 その後いつでも上書きすることができます。

- `setService(Zend_Service_ReCaptcha $service)` と `getService()` で、 ReCaptcha サービスオブジェクトを取得したり取得したりします。