将 reCAPTCHA 与 PHP 搭配使用

重要提示:1.0 版 reCAPTCHA API 不再受支持,请升级到 2.0 版。了解详情

reCAPTCHA PHP 库提供了一种简单的人机识别系统验证方式, 并防止漫游器滥用它该库封装了 reCAPTCHA API

要将 reCAPTCHA 与 PHP 搭配使用,您可以下载 reCAPTCHA PHP 库。您只需要在此处提供一个文件 (recaptchalib.php)。其他文件分别是 例如,自述文件以及法律内容 - 它们不会影响功能。

快速入门

注册 API 密钥后,以下是在您的网站上安装 reCAPTCHA 的基本说明。完整 下面提供了 PHP 插件参考指南。

客户端(如何显示人机识别系统图片)

如果您想使用 PHP 库显示 reCAPTCHA 微件,则需要将 这段代码位于 <form>元素,reCAPTCHA 微件将 地点:

  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 替换为以下内容来设置 $publickey 您的 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 控件会显示一条消息,说明用户 输入的文字不正确,应该再试一次。
  • 请注意,此代码请求的是 private 密钥,不要混淆 与公钥相关联。您可以从公钥所在的页面获取该信息。

    此外,请确保您的表单已设置为使用 $_POST(而非 $_REQUEST,并且表单本身使用的是 POST 方法。

    大功告成!reCAPTCHA 现在应该可以在您的网站上运行了。

    延伸阅读

  • 自定义外观和风格
  • 提示和准则
  • 问题排查
  • PHP 插件参考指南

    以下是 reCAPTCHA PHP 插件所有方法的完整列表。

    recaptcha_get_html 函数

    recaptcha_get_html 函数会显示将 reCAPTCHA 提交给 该 用户。

    recaptcha_get_html
    参数
    $pubkey - 字符串。必填字段。 您的 reCAPTCHA 公钥(来自 API 注册页面
    $error -- 字符串。可选(默认为 null) 如果设置了此字符串,reCAPTCHA 区域将显示错误代码 。此错误代码来自 ReCaptchaResponse->$error
    $use_ssl -- boolean.可选(默认为 false) 是否使用基于 SSL 的 API?如果您要向 确保将此参数设置为 true, 呈现方式
    返回值 包含要放置在网页上的 HTML 的字符串。

    recaptcha_check_answer 函数

    在用户填写完 HTML 表单(包括他们对人机识别系统的回答)后, 使用 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 -- boolean reCAPTCHA 是否认为答案有效?
    $error -- 字符串 如果答案无效,有什么问题吗?此错误代码可以是 在 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 版本会提供相应网址 对电子邮件进行解码,让您以 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>