重要提示: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_field
和recaptcha_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_html
和
recaptcha_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>