การใช้ 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 ในตัวอย่างข้างต้นคาดหวังว่า reCAPTCHA.lib.php จะอยู่ในไดเรกทอรีเดียวกับไฟล์แบบฟอร์มของคุณ หากอยู่ในไดเรกทอรีอื่น คุณต้องลิงก์โดเมนดังกล่าวอย่างเหมาะสม ตัวอย่างเช่น หาก reCAPTCHA ของคุณอยู่ในไดเรกทอรีที่ชื่อว่า "captcha" ที่อยู่ในระดับเดียวกับไฟล์แบบฟอร์มของคุณ ฟังก์ชันจะมีลักษณะดังนี้: require_once('captcha/recaptchalib.php')

ฝั่งเซิร์ฟเวอร์ (วิธีทดสอบว่าผู้ใช้ป้อนคำตอบที่ถูกต้องหรือไม่)

ควรวางโค้ดต่อไปนี้ไว้ที่ด้านบนของไฟล์ Confirm.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

    ฟังก์ชัน Recaptcha_get_html

    ฟังก์ชัน recaptcha_get_html จะแสดง HTML ที่แสดง reCAPTCHA ให้กับผู้ใช้

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

    ฟังก์ชัน reCAPTCHA

    หลังจากที่ผู้ใช้กรอกแบบฟอร์ม 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 -- ต้องระบุสตริง
    ค่าของช่องแบบฟอร์ม Recaptcha_challenge_field
    $Response -- สตริง จำเป็นต้องระบุ ค่าของช่องแบบฟอร์ม reCAPTCHAtcha_response_field
    ผลลัพธ์ อินสแตนซ์ของคลาส ReCaptchaResponse

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

    อีเมลซ่อนเอี๊ยม

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

    ส่วน Mailhide ของไลบรารี PHP จำเป็นต้องใช้โมดูล mcrypt ของ PHP

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

    Recaptcha_mailhide_url / reCAPTCHAtcha_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>