PHP で reCAPTCHA を使用する

重要: reCAPTCHA API のバージョン 1.0 のサポートは終了しました。バージョン 2.0 にアップグレードしてください。詳細

reCAPTCHA PHP ライブラリは、簡単な方法で CAPTCHA を bot による悪用を防止できます。ライブラリは、 reCAPTCHA API

PHP で reCAPTCHA を使用するには、reCAPTCHA PHP をダウンロードできます。 ライブラリ。必要なのは 1 つのファイル(recaptchalib.php)のみです。その他のファイルは、 例、readme、法的事項は機能に影響しません。

クイック スタート

API キーを登録したら、以下に reCAPTCHA をサイトにインストールするための基本的な手順を示します。フル PHP プラグインのリファレンス ガイドをご覧ください。

クライアントサイド(CAPTCHA 画像の表示方法)

PHP ライブラリを使用して reCAPTCHA ウィジェットを表示するには、 <form> 内にコード スニペットを配置して、要素を追加して、reCAPTCHA ウィジェットを配置します。 place:

  require_once('recaptchalib.php');
  $publickey = "your_public_key"; // you got this from the signup page
  echo recaptcha_get_html($publickey);

このコードでは、フォームは次のようになります。

  <html>
    <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
      <!-- your HTML content -->

      <form method="post" action="verify.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "your_public_key"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>

      <!-- more of your HTML content -->
    </body>
  </html>

$publickey の設定を忘れないでください。その場合は、your_public_key を API 公開鍵を使用します。

"action" の値として、属性が「verify.php」です。Verify.php が このフォームの値の送信先となる宛先ファイル。そのためファイルと Verify.php をクライアント html と同じ場所に置く必要があります。

上記の例の require_once 関数では、recaptchalib.php が同じプロジェクトに存在することが ディレクトリに配置します。別のディレクトリにある場合、適切にリンクする必要があります。 たとえば、recaptchalib.php が「captcha」というディレクトリにある場合などです。対応する 場合、関数は次のようになります。 require_once('captcha/recaptchalib.php')

サーバーサイド(ユーザーが正しい回答を入力したかどうかをテストする方法)

次のコードを Verify.php ファイルの先頭に配置します。

  <?php
  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }
  ?>

上記のコードでは、次のようになります。

  • recaptcha_check_answer は、ユーザーが操作を行ったかどうかを表すオブジェクトを返します。 チャレンジを無事に完了しました。
  • $resp->is_valid が true の場合、キャプチャ チャレンジは正しく完了しています。フォームの処理を続行する必要があります。
  • $resp->is_valid が false の場合、ユーザーが正しいキャプチャを指定していないことを示します。 再度確認できるように、フォームを再表示する必要があります。今回の場合 $resp->error は、recaptcha_get_html に提供可能なエラーコードです。 エラーコードを渡すと、reCAPTCHA コントロールに、ユーザーが入力したことを示すメッセージが表示される テキストが間違っていたため、もう一度試してください。
  • このコードは秘密鍵を要求していることに注意してください。これを混同しないように注意してください。 渡されます。公開鍵は、公開鍵と同じページから入手します。

    また、フォームが、 $_REQUEST_REQUEST_SCHEMA_REQUEST_POST !

    これで完了です。これで reCAPTCHA がサイトで機能するようになりました。

    関連情報

  • デザインのカスタマイズ
  • ヒントとガイドライン
  • トラブルシューティング
  • PHP プラグイン リファレンス ガイド

    以下に、reCAPTCHA PHP プラグインのすべてのメソッドの一覧を示します。

    recaptcha_get_html 関数

    recaptcha_get_html 関数は、reCAPTCHA を表示する HTML を表示します。 できます。

    recaptcha_get_html
    パラメータ
    $pubkey -- 文字列。必要ありません。 API 登録ページから取得した reCAPTCHA 公開鍵
    $error -- 文字列。省略可(デフォルトは null) この文字列が設定されている場合、reCAPTCHA の領域にエラーコードが表示されます できます。このエラーコードは ReCaptchaResponse->$error から取得されます。
    $use_ssl -- boolean.省略可(デフォルトは false) SSL ベースの API を使用する必要はありますか?ユーザーにページを表示している場合は、 true に設定して、エラー ダイアログで 表示されます。
    戻り値 ウェブページ上に配置する HTML を含む文字列。

    recaptcha_check_answer 関数

    ユーザーが HTML フォーム(CAPTCHA に対する回答を含む)を入力すると、 フォームの送信時に回答を確認したい場合は、 recaptcha_check_answer 関数を使用します。ユーザーの回答は 2 つのフォーム項目と recaptcha_challenge_fieldrecaptcha_response_field。「 reCAPTCHA ライブラリは、reCAPTCHA サーバーに HTTP リクエストを行い、ユーザーの あります。

    recaptcha_check_answer
    パラメータ
    $privkey -- 文字列。必要ありません。 API 登録ページの reCAPTCHA 秘密鍵。
    $remoteip -- 文字列。必要ありません。 ユーザーの IP アドレス(192.168.0.1 の形式)
    $challenge -- 文字列。必要ありません。
    フォーム フィールド reCAPTCHA_challenge_field の値
    $response -- 文字列。必須 フォーム フィールド recaptcha_response_field の値
    戻り値 ReCaptchaResponse クラスのインスタンス

    ReCaptchaResponse
    フィールド
    $is_valid -- boolean reCAPTCHA は、回答が有効であると認識しましたか?
    $error -- 文字列 回答が無効だった場合、どのような問題がありましたか?このエラーコードは recaptcha_get_html で使用されます
    戻り値 メールアドレスをデコードするための HTML または未加工の URL(使用する機能によって異なります) 呼び出すことができます。

    メールハイド

    reCAPTCHA PHP ライブラリには、Mailhide API 用のバインディングが含まれています。この API を使用すると、reCAPTCHA でメールをラップして、スパマーに見られないようにすることができます。 test...@example.com となります。

    PHP ライブラリの Mailhide 部分には PHP mcrypt モジュールが必要です。

    Mailhide API は recaptcha_mailhide_htmlrecaptcha_mailhide_url。関数には同じパラメータがあります。_html バージョン は HTML を返します。 ウェブページに直接配置できます渡されるメールのユーザー名部分 は切り捨てられ、Mailhide を呼び出すリンクに置き換えられます。_url 版では、URL を指定します。 をデコードし、HTML 形式でメールを配置するかどうかは任意です。

    recaptcha_mailhide_url / recaptcha_mailhide_html
    パラメータ
    $pubkey -- 文字列 登録ページの Mailhide 公開鍵
    $privkey -- 文字列 登録ページの Mailhide 秘密鍵
    $email -- 文字列 非表示にするメールアドレス。

    次の例は、Mailhide の使用方法を示しています。

    <html><body>
    <?
    require_once ("recaptchalib.php");
    // get a key at http://www.google.com/recaptcha/mailhide/apikey
    $mailhide_pubkey = '';
    $mailhide_privkey = '';
    ?>
    The Mailhide encoding of example@example.com is
    <?
    echo recaptcha_mailhide_html ($mailhide_pubkey,
                                  $mailhide_privkey,
                                  "example@example.com");
    ?>.
    <br>
    The url for the email is:
    <?
    echo recaptcha_mailhide_url ($mailhide_pubkey,
                                 $mailhide_privkey,
                                 "example@example.com");
    ?>
    <br>
    </body></html>