將 reCAPTCHA 與 PHP 搭配使用

重要事項:系統已不再支援 reCAPTCHA API 1.0 版,請升級至 2.0 版。瞭解詳情

reCAPTCHA PHP 程式庫提供簡便的方法來放置 CAPTCHA, 偵測您的 PHP 網站,協助您阻止漫遊器濫用網站。這個程式庫會納入 reCAPTCHA API

如要在 PHP 中使用 reCAPTCHA,可以下載 reCAPTCHA PHP 程式庫。此時只需要一個檔案 (recaptchalib.php)。其他檔案是範例、說明檔和法律資訊,不會影響功能。

快速入門

註冊 API 金鑰後,請參閱下列基本操作說明,瞭解如何在網站上安裝 reCAPTCHA。滿載 您可以在下方找到 PHP 外掛程式的參考指南。

用戶端 (如何顯示人機驗證圖片)

如果您想使用 PHP 程式庫顯示 reCAPTCHA 小工具,請在 reCAPTCHA 小工具放置的 <form> 元素中插入這段程式碼:

  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>

別忘了將 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,則代表人機驗證 (Captcha) 已正確完成,建議您繼續進行表單處理。
  • 如果 $resp->is_valid 為 false,則使用者未能提供正確的人機驗證 (Captcha) 並且可以重新顯示表單,讓使用者再次輸入內容。在這個案例中 $resp->error 是可提供給 recaptcha_get_html 的錯誤代碼。 傳送錯誤代碼後,reCAPTCHA 控制項會顯示訊息,說明使用者輸入的文字有誤,應重新嘗試。
  • 請注意,這個程式碼要求的是私密金鑰,請勿與公開金鑰混淆。您可以從公開金鑰所在的頁面取得該值。

    此外,請確認表單已設為使用 $_POST 而非 $_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 -- 布林值。選填 (預設為 false) 是否應該使用基於 SSL 的 API?如果您要在 透過 SSL 存取使用者,請務必將這項設定設為 True,以免發生錯誤對話方塊 出現在使用者的瀏覽器中
    傳回值 包含要放在網頁的 HTML 字串。

    recaptcha_check_answer 函式

    使用者填妥 HTML 表單 (包括人機驗證 (CAPTCHA) 的答案) 之後, 希望在提交表單時 recaptcha_check_answer 函式。使用者的答案會儲存在兩個表單欄位 recaptcha_challenge_fieldrecaptcha_response_field 中。 reCAPTCHA 程式庫會向 reCAPTCHA 伺服器發出 HTTP 要求,並驗證使用者的 回答的問題

    recaptcha_check_answer
    參數
    $privkey -- 字串。必要。 您的 reCAPTCHA 私密金鑰 (來自 API 註冊頁面)。
    $remoteip -- 字串。必要。 使用者的 IP 位址,格式為 192.168.0.1
    $challenge -- 字串。這通常代表交易 不會十分要求關聯語意
    表單欄位 recaptcha_challenge_field 的值
    $response -- 字串。必要 表單欄位的值 recaptcha_response_field
    傳回值 ReCaptchaResponse 類別的例項

    ReCaptchaResponse
    欄位
    $is_valid -- 布林值 reCAPTCHA 是否認為答案有效?
    $error -- string 如果答案無效,問題出在哪裡?系統可能會顯示這個錯誤代碼 用於 recaptcha_get_html
    傳回值 用於解碼電子郵件地址的 HTML 或原始網址,視您呼叫的函式而定。

    Mailhide

    reCAPTCHA PHP 程式庫包含 Mailhide API 的繫結。這個 這個 API 可讓您將電子郵件包裝在 reCAPTCHA 中,防止垃圾訊息散佈者看到: 測驗...@example.com。

    PHP 程式庫的 Mailhide 部分需要 PHP mcrypt 模組。

    Mailhide API 包含兩個函式 recaptcha_mailhide_htmlrecaptcha_mailhide_url。函式的參數相同。_html 版本會傳回可直接放入網頁的 HTML。所傳入電子郵件的使用者名稱部分 會被截斷,並替換為呼叫 Mailhide 的連結。_url 版本可提供網址 。

    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>