重要事項:系統已不再支援 reCAPTCHA API 1.0 版,請升級至 2.0 版。瞭解詳情
reCAPTCHA PHP 程式庫可讓您輕鬆在 PHP 網站上放置 CAPTCHA,以防止機器人濫用此程式庫。程式庫會納入 reCAPTCHA API。
如要將 reCAPTCHA 與 PHP 搭配使用,您可以下載 reCAPTCHA PHP 程式庫。只需要一個檔案 (recaptchalib.php)。其他檔案為範例、README 和法律內容,不會影響功能。
快速啟動
註冊 API 金鑰後,請按照下列基本操作說明在網站上安裝 reCAPTCHA。以下提供 PHP 外掛程式的完整參考指南。
用戶端 (如何顯示人機驗證 (Captcha) 圖片)
如要使用 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 公開金鑰,藉此設定 $publickey。
請注意,「action」屬性的值是「verify.php」。現在,Verify.php 是這個表單的值會提交到的目的地檔案。因此,您需要在用戶端 html 所在的位置中有一個 test.php 檔案。
上述範例中的 required_once 函式預期 recaptchalib.php 會與表單檔案位於相同的目錄中。如果檔案位於其他目錄中,請務必正確連結。
舉例來說,如果您的 recaptchalib.php 位於名為「captcha」的目錄中,且與表單檔案位於同一層級,函式看起來會像這樣:require_once('captcha/recaptchalib.php')
。
伺服器端 (如何測試使用者是否輸入正確答案)
下列程式碼應置於 validation.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 -- string.必要項目。 | API 註冊頁面中的 reCAPTCHA 公開金鑰 |
$error -- 字串。選用 (空值為預設值) | 如果設定這個字串,reCAPTCHA 區域會顯示指定的錯誤代碼。這個錯誤代碼來自 ReCaptchaResponse->$error |
$use_ssl -- boolean. optional (預設為 false) | 是否應該使用以 SSL 為基礎的 API?如果您要透過安全資料傳輸層 (SSL) 向使用者顯示網頁,請務必將這個值設為 true,這樣使用者的瀏覽器就不會出現錯誤對話方塊。 |
傳回值 | 包含要放在網頁的 HTML 字串。 |
recaptcha_check_answer 函式
使用者填妥 HTML 表單 (包括人機驗證 (CAPTCHA) 的答案) 後,我們會希望使用 recaptcha_check_answer
函式提交表單時,檢查作答內容。使用者的答案將分成兩個表單欄位:recaptcha_challenge_field
和 recaptcha_response_field
。reCAPTCHA 程式庫會向 reCAPTCHA 伺服器發出 HTTP 要求,並驗證使用者的答案。
recaptcha_check_answer | |
參數 | |
$privkey -- string.必要。 | 您的 reCAPTCHA 私密金鑰 (來自 API 註冊頁面)。 |
$remoteip -- 必要字串。 | 使用者的 IP 位址,格式為 192.168.0.1 |
$challenge -- 字串。 |
表單欄位 recaptcha_challenge_field 的值 |
$response -- 字串。必要 | 表單欄位 recaptcha_response_field 的值 |
傳回值 | ReCaptchaResponse 類別的例項 |
ReCaptchaResponse | |
欄位 | |
$is_valid -- 布林值 | reCAPTCHA 認為答案有效嗎? |
$error -- 字串 | 如果答案無效,請說明問題為何?這個錯誤代碼可用於 recaptcha_get_html |
傳回值 | 用來解碼電子郵件地址的 HTML 或原始網址 (取決於您呼叫的函式)。 |
郵件隱藏
reCAPTCHA PHP 程式庫包含 Mailhide API 的繫結。這個 API 可讓您將電子郵件包裝在 reCAPTCHA 中,防止垃圾郵件散佈者查看:exam...@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 -- string | 申請頁面中的 Mailhide 公開金鑰 |
$privkey -- string | 申請頁面中的 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>