reCAPTCHA'yı PHP ile kullanma

Önemli: reCAPTCHA API'nin 1.0 sürümü artık desteklenmiyor, lütfen 2.0 sürümüne yükseltin. Daha fazla bilgi

reCAPTCHA PHP Kitaplığı, PHP web sitenize bir CAPTCHA yerleştirmenin basit bir yolunu sunarak botların sitenizi kötüye kullanmasını önlemenize yardımcı olur. Kitaplık, reCAPTCHA API'yi sarmalar.

reCAPTCHA'yı PHP ile kullanmak için reCAPTCHA PHP kitaplığını indirebilirsiniz. Oradan yalnızca bir dosyaya ihtiyacınız olacak (recaptchalib.php). Diğer dosyalar örnek, beni oku ve yasal dosyalardır. Bunlar, işlevselliği etkilemez.

Hızlı Başlangıç Kılavuzu

API anahtarlarınızı oluşturduktan sonra reCAPTCHA'yı sitenize yüklemeye ilişkin temel talimatları aşağıda bulabilirsiniz. PHP eklentisi için tam başvuru kılavuzunu aşağıda bulabilirsiniz.

İstemci Tarafı (CAPTCHA resminin görünmesini sağlama)

reCAPTCHA widget'ını görüntülemek için PHP kitaplığını kullanmak istiyorsanız bu kod snippet'ini reCAPTCHA widget'ının yerleştirileceği <form> öğesinin içine eklemeniz gerekir:

  require_once('recaptchalib.php');
  $publickey = "your_public_key"; // you got this from the signup page
  echo recaptcha_get_html($publickey);

Bu kod kullanıldığında formunuz aşağıdaki gibi görünebilir:

  <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 yerine API ortak anahtarınızla $publickey anahtarını ayarlamayı unutmayın.

"action" özelliğinin değerinin "verify.php" olduğunu unutmayın. Doğrulama.php dosyası, bu formun değerlerinin gönderildiği hedef dosyadır. Dolayısıyla, istemci html ile aynı konumda birverify.php dosyasına ihtiyacınız olacaktır.

Yukarıdaki örnekte bulunanrequire_once işlevi, reCAPTCHAlib.php dosyasının form dosyanızla aynı dizinde olmasını bekler. Başka bir dizindeyse, uygun şekilde bağlamanız gerekir. Örneğin, reCAPTCHAlib.php dosyanız, form dosyanızla aynı düzeyde olan "captcha" adlı dizindeyse işlev şöyle görünür: require_once('captcha/recaptchalib.php').

Sunucu Tarafı (Kullanıcının doğru yanıtı girip girmediğini test etme)

Aşağıdaki kod,verify.php dosyasının en üstüne yerleştirilmelidir:

  <?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
  }
  ?>

Yukarıdaki kodda:

  • recaptcha_check_answer, kullanıcının görevi başarıyla tamamlayıp tamamlamadığını gösteren bir nesne döndürür.
  • $resp->is_valid değeri doğru ise captcha testi doğru şekilde tamamlanmıştır ve form işlemeye devam etmeniz gerekir.
  • $resp->is_valid değeri false (yanlış) değerine ayarlanırsa kullanıcı doğru captcha metnini sağlayamamıştır. Bu durumda, kullanıcının başka bir girişimde bulunabilmesi için formu yeniden görüntülemeniz gerekir. Bu durumda $resp->error, recaptcha_get_html adresine sağlanabilen bir hata kodu olacaktır. Hata kodu iletildiğinde reCAPTCHA kontrolü, kullanıcının metni yanlış girdiği ve tekrar denemesi gerektiğini açıklayan bir mesaj görüntüler.
  • Bu kodun, ortak anahtarla karıştırılmaması gereken özel anahtarı istediğine dikkat edin. Bunu ortak anahtarla aynı sayfadan alırsınız.

    Ayrıca formunuzun, form değişkenlerini $_REQUEST yerine $_POST kullanarak alacak şekilde ayarlandığından ve formun kendisinin POST yöntemini kullandığından emin olun.

    Hepsi bu kadar! reCAPTCHA artık sitenizde çalışıyor olmalı.

    Ek Okumalar

  • Görünüm ve Tarzı Özelleştirme
  • İpuçları ve Kurallar
  • Sorun giderme
  • PHP Eklentisi Başvuru Kılavuzu

    Aşağıda, reCAPTCHA PHP Eklentisi'nin tüm yöntemlerinin kapsamlı bir listesi bulunmaktadır.

    reCAPTCHA_get_html işlevi

    recaptcha_get_html işlevi, reCAPTCHA'yı kullanıcıya sunan HTML'yi gösterir.

    recaptcha_get_html
    Parametre
    $pubkey -- dize. gerekli. API Kayıt Sayfasından alınan reCAPTCHA ortak anahtarınız
    $error -- dize. isteğe bağlı (boş, varsayılan değerdir) Bu dize ayarlanırsa verilen hata kodu reCAPTCHA alanında gösterilir. Bu hata kodu ReCaptchaResponse->$error kaynağından gelir
    $use_ssl -- boole. isteğe bağlı (yanlış varsayılandır) SSL tabanlı API kullanılmalı mı? Kullanıcıya SSL üzerinden bir sayfa görüntülüyorsanız kullanıcının tarayıcısında hata iletişim kutusu görünmemesi için bunu true olarak ayarladığınızdan emin olun.
    Döndürülen değer Web sayfasına yerleştirilecek HTML'yi içeren bir dize.

    reCAPTCHA_check_answer işlevi

    Kullanıcı, CAPTCHA yanıtıyla birlikte HTML formunu doldurduktan sonra, recaptcha_check_answer işlevini kullanarak formu gönderdiğinde verdiği yanıtı kontrol etmek isteriz. Kullanıcının yanıtı recaptcha_challenge_field ve recaptcha_response_field olmak üzere iki form alanında olacaktır. reCAPTCHA kitaplığı, reCAPTCHA sunucusuna bir HTTP isteği gönderir ve kullanıcının yanıtını doğrular.

    recaptcha_check_answer
    Parametre
    $privkey -- dize. gerekli. API Kayıt Sayfası'ndaki reCAPTCHA özel anahtarınız.
    $remoteip -- dize. gerekli. Kullanıcının 192.168.0.1 biçimindeki IP adresi
    $challenge -- dize. gerekli.
    reCAPTCHA_challenge_field form alanının değeri
    $yanıt - dize. gerekli Form alanının reCAPTCHA_response_field değeri
    Döndürülen değer ReCaptchaResponse sınıfının bir örneği

    ReCaptchaResponse
    Alan
    $is_valid -- boole reCAPTCHA, cevabın geçerli olduğunu düşünüyor muydu?
    $error -- dize Aldığınız yanıt geçersizse sorun neydi? Bu hata kodu, reCAPTCHA_get_html için kullanılabilir
    Döndürülen değer Hangi işlevi çağırdığınıza bağlı olarak e-posta adresinin kodunu çözecek HTML veya ham URL.

    Posta gizleme

    reCAPTCHA PHP Kitaplığı Mailhide API'sı için bağlamalar içerir. Bu API, spam yapanların görmesini önlemek için bir e-postayı reCAPTCHA ile sarmalamanıza olanak tanır: exam...@example.com.

    PHP Kitaplığı'nın Mailhide bölümü, PHP mcrypt modülünü gerektirir.

    Mailhide API iki işlevden oluşur: recaptcha_mailhide_html ve recaptcha_mailhide_url. İşlevler aynı parametrelere sahip. _html sürümü, doğrudan web sayfanıza yerleştirilebilen HTML döndürür. E-postanın geçirilen kullanıcı adı bölümü kısaltılır ve Mailhide'ı çağıran bir bağlantıyla değiştirilir. _url sürümü, e-postanın kodunu çözeceğiniz URL'yi sağlar ve e-postayı HTML'ye yerleştirmenizi size bırakır.

    reCAPTCHA_mailhide_url / reCAPTCHA_mailhide_html
    Parametre
    $pubkey -- dize Kayıt sayfasındaki Mailhide ortak anahtarı
    $privkey -- dize Kayıt sayfasındaki Mailhide özel anahtarı
    $email -- dize Gizlemek istediğiniz e-posta adresi.

    Aşağıdaki örnekte Mailhide'ın nasıl kullanılacağı gösterilmektedir:

    <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>