การใช้ reCAPTCHA ด้วย PHP

สำคัญ: ไม่รองรับ reCAPTCHA API เวอร์ชัน 1.0 อีกต่อไป โปรดอัปเกรดเป็นเวอร์ชัน 2.0 ดูข้อมูลเพิ่มเติม

ไลบรารี reCAPTCHA PHP มอบวิธีง่ายๆ ในการวาง CAPTCHA บน เว็บไซต์ PHP ของคุณเพื่อช่วยป้องกันการละเมิดโดยบ็อต ไลบรารีครอบคลุม reCAPTCHA API

หากต้องการใช้ reCAPTCHA กับ PHP คุณสามารถดาวน์โหลด reCAPTCHA PHP ได้ คลัง คุณต้องใช้เพียงไฟล์เดียวจากที่นั่น (recaptchalib.php) ไฟล์อื่นๆ ตัวอย่าง, Readme และเนื้อหาด้านกฎหมาย -- ทั้งหมดไม่ส่งผลต่อฟังก์ชันการทำงาน

คู่มือเริ่มต้นฉบับย่อ

หลังจากลงชื่อสมัครใช้คีย์ API แล้ว ด้านล่างนี้คือวิธีการพื้นฐานสำหรับการติดตั้ง reCAPTCHA ในเว็บไซต์ เต็ม คู่มืออ้างอิงปลั๊กอิน PHP มีอยู่ด้านล่างนี้

ฝั่งไคลเอ็นต์ (วิธีทำให้รูปภาพ CAPTCHA ปรากฏขึ้น)

หากคุณต้องการใช้ไลบรารี 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>

อย่าลืมตั้งค่า $publickey โดยแทนที่ your_public_key ด้วย คีย์สาธารณะ API ของคุณ

โปรดทราบว่าค่าของ "action" คือ "verify.php" ในตอนนี้ Verify.php คือ ปลายทาง ที่จะส่งค่าของแบบฟอร์มนี้ไปให้ ดังนั้นคุณจะต้องมีไฟล์ Verify.php ในตำแหน่งเดียวกับ HTML ของไคลเอ็นต์

ฟังก์ชัน required_once ในตัวอย่างข้างต้นควรคาดหวังโค้ด reCAPTCHAtchalib.php เป็นไฟล์ฟอร์มของคุณ หากไฟล์อยู่ในไดเรกทอรีอื่น คุณต้องลิงก์อย่างถูกต้อง ตัวอย่างเช่น หาก reCAPTCHA ของคุณอยู่ในไดเรกทอรีที่ชื่อ "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 เป็นจริง แสดงว่าคำถาม CAPTCHA เสร็จสมบูรณ์และคุณควรดำเนินการแบบฟอร์มต่อ
  • หาก $resp->is_valid เป็นเท็จ ผู้ใช้จะป้อน CAPTCHA ที่ถูกต้องไม่ได้ และคุณควรจะแสดงฟอร์มดังกล่าวอีกครั้งเพื่อให้ดูอีกครั้ง ในกรณีนี้ $resp->error จะเป็นรหัสข้อผิดพลาดที่ระบุให้กับ recaptcha_get_html ได้ การส่งผ่านรหัสข้อผิดพลาดทำให้ตัวควบคุม reCAPTCHA แสดงข้อความที่อธิบายผู้ใช้ ป้อนข้อความไม่ถูกต้องและควรลองอีกครั้ง
  • โปรดสังเกตว่าโค้ดนี้จะขอคีย์ส่วนตัว ซึ่งไม่ควรสับสน ด้วยคีย์สาธารณะ คุณจะได้รับข้อมูลดังกล่าวจากหน้าเดียวกับคีย์สาธารณะ

    และตรวจสอบว่าได้ตั้งค่าแบบฟอร์มให้รับตัวแปรแบบฟอร์มโดยใช้ $_POST แทนที่จะเป็น $_REQUEST และฟอร์มนั้นใช้วิธีการ POST

    เท่านี้ก็เรียบร้อย ตอนนี้ reCAPTCHA ควรใช้งานได้ในเว็บไซต์ของคุณ

    อ่านเพิ่มเติม

  • การปรับแต่งรูปลักษณ์
  • เคล็ดลับและหลักเกณฑ์
  • การแก้ปัญหา
  • คู่มืออ้างอิงปลั๊กอิน PHP

    ด้านล่างนี้เป็นรายการที่ครอบคลุมของวิธีการทั้งหมดของปลั๊กอิน reCAPTCHA PHP

    ฟังก์ชัน reCAPTCHAtcha_get_html

    ฟังก์ชัน recaptcha_get_html จะแสดง HTML ที่แสดง reCAPTCHA ต่อ เวลา ผู้ใช้

    recaptcha_get_html
    พารามิเตอร์
    $pubkey -- สตริง ต้องระบุ คีย์สาธารณะ reCAPTCHA จากหน้าลงชื่อสมัครใช้ API
    $error -- สตริง ไม่บังคับ (ค่าเริ่มต้นคือ null) หากตั้งค่าสตริงนี้ พื้นที่ reCAPTCHA จะแสดงรหัสข้อผิดพลาด ที่ให้ไว้ รหัสข้อผิดพลาดนี้มาจาก ReCaptchaResponse->$error
    $use_ssl -- boolean. ไม่บังคับ (ค่าเริ่มต้นเป็นเท็จ) ควรใช้ API แบบ SSL หรือไม่ หากคุณกำลังแสดงหน้าเว็บใน ผู้ใช้ผ่านทาง SSL ตรวจสอบว่าได้ตั้งค่านี้เป็น "จริง" เพื่อไม่ให้กล่องโต้ตอบข้อผิดพลาด ปรากฏขึ้นในเบราว์เซอร์ของผู้ใช้
    ผลลัพธ์ สตริงที่มี HTML ที่จะวางในหน้าเว็บ

    ฟังก์ชัน reCAPTCHAtcha_check_answer

    หลังจากที่ผู้ใช้กรอกแบบฟอร์ม HTML และตอบคำถาม CAPTCHA แล้ว ต้องการตรวจสอบคำตอบเมื่อส่งแบบฟอร์มโดยใช้ recaptcha_check_answer คำตอบของผู้ใช้จะอยู่ในช่องฟอร์ม 2 ช่อง recaptcha_challenge_field และ recaptcha_response_field ไลบรารี reCAPTCHA จะส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ reCAPTCHA และยืนยันข้อมูลของผู้ใช้ คำตอบ

    recaptcha_check_answer
    พารามิเตอร์
    $privkey -- สตริง ต้องระบุ คีย์ส่วนตัว reCAPTCHA จากหน้าลงชื่อสมัครใช้ API
    $remoteip -- สตริง ต้องระบุ ที่อยู่ IP ของผู้ใช้ในรูปแบบ 192.168.0.1
    $challenge -- สตริง ต้องระบุ
    ค่าของฟิลด์ reCAPTCHAtcha_challenge_field
    $response -- สตริง ต้องระบุ ค่าในช่อง reCAPTCHAtcha_response_field
    ผลลัพธ์ อินสแตนซ์ของคลาส ReCaptchaResponse

    ReCaptchaResponse
    ช่อง
    $is_valid -- boolean reCAPTCHA เชื่อว่าคำตอบถูกต้องไหม
    $error -- สตริง หากคำตอบไม่ถูกต้อง คุณพบปัญหาอะไร รหัสข้อผิดพลาดนี้อาจเป็น ใช้ใน reCAPTCHAtcha_get_html
    ผลลัพธ์ HTML หรือ URL ดิบที่จะถอดรหัสที่อยู่อีเมล ซึ่งขึ้นอยู่กับว่าคุณใช้บริการใด โทรออก

    เมลซ่อน

    ไลบรารี reCAPTCHA PHP ประกอบด้วยการเชื่อมโยงสำหรับ Mailhide API ช่วงเวลานี้ API ให้คุณรวมอีเมลไว้ใน reCAPTCHA เพื่อป้องกันไม่ให้นักส่งสแปมเห็นได้ การสอบ...@example.com

    ส่วน Mailhide ของไลบรารี PHP ต้องการโมดูล mcrypt ของ PHP

    Mailhide API ประกอบด้วยสองฟังก์ชัน recaptcha_mailhide_html และ recaptcha_mailhide_url ฟังก์ชันต่างๆ มีพารามิเตอร์เดียวกัน เวอร์ชัน _html แสดงผล HTML ซึ่งสามารถใส่ลงในหน้าเว็บได้โดยตรง ส่วนของชื่อผู้ใช้ของอีเมลที่ส่งผ่าน จะถูกตัดออกและแทนที่ด้วยลิงก์ที่เรียกใช้ Mailhide เวอร์ชัน _url จะให้ URL แก่คุณ เพื่อถอดรหัสอีเมลและเหลือไว้ให้คุณวางอีเมลใน HTML

    Recaptcha_mailhide_url / สำรองtcha_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>