Zend_Service_ReCaptcha(日本語)
導入
Zend_Service_ReCaptcha は reCAPTCHA Web Service
用のクライアントです。reCAPTCHA のサイトによると、
"reCAPTCHA is a free CAPTCHA service that
helps to digitize books
(reCAPTCHA はフリーな CAPTCHA サービスで、
書籍の電子化を支援しています)" とのことです。
reCAPTCHA は、ユーザにふたつの単語を入力させます。
ひとつは実際の CAPTCHA で、もうひとつはスキャンされたテキスト
(OCR ソフトウェアで認識できないもの) の単語です。
ユーザが最初の単語を正しく入力したら、
おそらく 2 番目の単語も正しく入力してくれるものとみなせます。
その入力内容を使って、OCR ソフトウェアの能力を向上させるわけです。
reCAPTCHA サービスを使用するには、アカウントのサインアップ
が必要です。また公開鍵と秘密鍵を作成するには、
サービスを使用するドメインを登録しなければなりません。
単純な使用法
Zend_Service_ReCaptcha オブジェクトのインスタンスを作成し、
公開鍵と秘密鍵を渡します。
reCAPTCHA サービスのインスタンスの作成
reCAPTCHA をレンダリングするには、
getHTML() メソッドをコールするだけです。
reCAPTCHA の表示
getHTML();
]]>
フォームから送信されてきた内容のうち、
'recaptcha_challenge_field' と 'recaptcha_response_field'
のふたつのフィールドの内容を受け取らなければなりません。
これらを、reCAPTCHA オブジェクトの verify()
メソッドに渡します。
フォームフィールドの検証
verify(
$_POST['recaptcha_challenge_field'],
$_POST['recaptcha_response_field']
);
]]>
結果が得られたら、正しいものだったかどうかを確認します。結果は
Zend_Service_ReCaptcha_Response オブジェクトとなり、
このオブジェクトは isValid() メソッドを提供しています。
reCAPTCHA の検証
isValid()) {
// 検証に失敗
}
]]>
reCAPTCHA
Zend_Captcha アダプタを使うか、そのアダプタを
CAPTCHA
フォーム要素
のバックエンドとして使うことがもっと簡単です。
どちらの場合でも、reCAPTCHA のレンダリングや検証は自動化されます。
メールアドレスの隠蔽
Zend_Service_ReCaptcha_MailHide を使うと、
メールアドレスを隠蔽できます。メールアドレスの一部分を、
reCAPTCHA チャレンジのポップアップウィンドウに置き換えます。
チャレンジを解決すると、完全なメールアドレスがあらわれるというわけです。
このコンポーネントを使うには、
mailhide API 用の公開キーと秘密キーを生成するための
アカウント
が必要です。
mail hide コンポーネントの使用法
setPublicKey($pubKey);
$mailHide->setPrivateKey($privKey);
$mailHide->setEmail($mail);
// 表示します
print($mailHide);
]]>
上の例の表示は "m...@example.com" のようになり、 "..."
のリンクは reCAPTCHA チャレンジのポップアップウィンドウを表示します。
公開キーと秘密キーそしてメールアドレスは、クラスのコンストラクタで指定することもできます。
4 番目の引数も存在し、ここでコンポーネントのオプションを設定できます。
使用できるオプションは次の表のとおりです。
Zend_Service_ReCaptcha_MailHide のオプション
オプション
説明
期待する値
デフォルト値
linkTitle
リンクの title 属性
文字列
'Reveal this e-mail address'
linkHiddenText
ポップアップリンクを含める文字列
文字列
'...'
popupWidth
ポップアップウィンドウの幅
int
500
popupHeight
ポップアップウィンドウの高さ
int
300
オプションの設定は、コンストラクタの 4 番目の引数で指定する以外にも
setOptions($options) メソッドで行うこともできます。
このメソッドには、連想配列あるいは Zend_Config
のインスタンスを渡します。
多数の隠しメールアドレスの作成
setPublicKey($pubKey);
$mailHide->setPrivateKey($privKey);
$mailHide->setOptions(array(
'linkTitle' => 'Click me',
'linkHiddenText' => '+++++',
));
// 隠したいメールアドレス
$mailAddresses = array(
'mail@example.com',
'johndoe@example.com',
'janedoe@example.com',
);
foreach ($mailAddresses as $mail) {
$mailHide->setEmail($mail);
print($mailHide);
}
]]>