Używanie reCAPTCHA z PHP

Ważne: interfejs API reCAPTCHA w wersji 1.0 nie jest już obsługiwany. Uaktualnij go do wersji 2.0. Więcej informacji

Biblioteka PHP reCAPTCHA to prosty sposób na umieszczenie kodu CAPTCHA w swojej witrynie w języku PHP, pomagając Ci powstrzymać boty przed jego nadużywaniem. W bibliotece znajduje się interfejs reCAPTCHA API.

Aby używać reCAPTCHA w języku PHP, możesz pobrać bibliotekę PHP reCAPTCHA. Potrzebujesz tylko jednego pliku (recaptchalib.php). Pozostałe pliki to przykłady, pliki Readme i informacje prawne – nie wpływają one na funkcjonalność.

Szybki start

Po zarejestrowaniu kluczy interfejsu API poniżej znajdziesz podstawowe instrukcje instalowania reCAPTCHA w swojej witrynie. Pełny przewodnik po wtyczce PHP znajdziesz poniżej.

Po stronie klienta (jak wyświetlić obraz CAPTCHA)

Jeśli chcesz użyć biblioteki PHP do wyświetlania widżetu reCAPTCHA, musisz wstawić ten fragment kodu w elemencie <form>, w którym zostanie umieszczony widżet reCAPTCHA:

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

Twój formularz z kodem może wyglądać mniej więcej tak:

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

Nie zapomnij ustawić $publickey, zastępując your_public_key swoim kluczem publicznym interfejsu API.

Zwróć uwagę, że wartość atrybutu „action” to „verify.php”. Zweryfikuj.php to plik docelowy, w którym przesyłane są wartości tego formularza. Musisz więc mieć plik verify.php w tym samym miejscu co kod HTML klienta.

Funkcja required_once w przykładzie powyżej wymaga, aby plik recaptchalib.php znajdował się w tym samym katalogu co plik formularza. Jeśli znajduje się on w innym katalogu, musisz połączyć go z odpowiednim katalogiem. Jeśli na przykład plik recaptchalib.php znajduje się w katalogu o nazwie „captcha”, który znajduje się na tym samym poziomie co plik formularza, funkcja będzie wyglądać tak: require_once('captcha/recaptchalib.php').

Po stronie serwera (jak sprawdzić, czy użytkownik wpisał poprawną odpowiedź)

Ten kod należy umieścić u góry pliku weryfikacyjnego.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
  }
  ?>

W tym kodzie:

  • recaptcha_check_answer zwraca obiekt, który wskazuje, czy użytkownik wykonał zadanie.
  • Jeśli $resp->is_valid ma wartość prawda, test captcha został poprawnie wykonany i należy kontynuować przetwarzanie formularza.
  • Jeśli $resp->is_valid ma wartość false (fałsz), użytkownik nie podał poprawnego tekstu z obrazka captcha. Musisz ponownie wyświetlić formularz, aby umożliwić mu kolejną próbę. W tym przypadku $resp->error jest kodem błędu, który można przekazać do recaptcha_get_html. Po przekazaniu kodu błędu element sterujący reCAPTCHA wyświetla komunikat z wyjaśnieniem, że użytkownik wpisał tekst nieprawidłowo i powinien spróbować ponownie.
  • Zwróć uwagę, że ten kod prosi o klucz prywatny, którego nie należy mylić z kluczem publicznym. Znajdziesz go na tej samej stronie co klucz publiczny.

    Sprawdź też, czy formularz jest ustawiony tak, aby pobierał zmienne formularza za pomocą metody $_POST zamiast $_REQUEST, oraz czy sam formularz korzysta z metody POST.

    To wszystko! reCAPTCHA powinno już działać w Twojej witrynie.

    Dalsza lektura

  • Dostosowywanie wyglądu i stylu
  • Wskazówki i wytyczne
  • Rozwiązywanie problemów
  • Przewodnik po wtyczce PHP

    Poniżej znajdziesz wyczerpującą listę wszystkich metod wtyczki reCAPTCHA PHP.

    Funkcja recaptcha_get_html

    Funkcja recaptcha_get_html wyświetla kod HTML przedstawiający reCAPTCHA użytkownikowi.

    recaptcha_get_html
    Parametr
    $pubkey -- string. required. Twój klucz publiczny reCAPTCHA ze strony rejestracji interfejsu API,
    $error -- string. optional (wartość domyślna to wartość null) Jeśli ten ciąg znaków jest ustawiony, w obszarze reCAPTCHA będzie wyświetlany kod błędu. Ten kod błędu pochodzi z ReCaptchaResponse->$error
    $use_ssl – wartość logiczna. opcjonalnie (wartość domyślna to fałsz) Czy należy używać interfejsu API opartego na protokole SSL? Jeśli wyświetlasz stronę przez SSL, pamiętaj, aby ustawić wartość Prawda, aby w przeglądarce użytkownika nie było wyświetlane okno błędu.
    Zwracana wartość Ciąg tekstowy zawierający kod HTML do umieszczenia na stronie internetowej.

    Funkcja recaptcha_check_answer

    Gdy użytkownik wypełni formularz HTML, w tym odpowiedź na zadanie CAPTCHA, musimy sprawdzić jego odpowiedź w przesłanym formularzu za pomocą funkcji recaptcha_check_answer. Odpowiedź użytkownika pojawi się w 2 polach formularza: recaptcha_challenge_field i recaptcha_response_field. Biblioteka reCAPTCHA wyśle żądanie HTTP do serwera reCAPTCHA i sprawdzi odpowiedź użytkownika.

    recaptcha_check_answer
    Parametr
    $privkey -- string. wymagany. Twój klucz prywatny reCAPTCHA ze strony rejestracji interfejsu API.
    $remoteip – ciąg znaków. wymagany. Adres IP użytkownika w formacie 192.168.0.1
    $challenge -- ciąg. wymagany.
    Wartość pola formularza recaptcha_challenge_field
    $response -- string. required Wartość pola formularza recaptcha_response_field;
    Zwracana wartość Instancja klasy ReCaptchaResponse

    ReCaptchaResponse
    Pole
    $is_valid – wartość logiczna Czy reCAPTCHA uważał, że odpowiedź jest poprawna?
    $error – ciąg znaków Jeśli odpowiedź była nieprawidłowa, jaki był problem? Tego kodu błędu można użyć w żądaniu recaptcha_get_html.
    Zwracana wartość Kod HTML lub nieprzetworzony adres URL do zdekodowania adresu e-mail w zależności od wywołanej funkcji.

    Mailhide

    Biblioteka PHP reCAPTCHA zawiera powiązania interfejsu API Mailhide. Ten interfejs API pozwala opakować adres e-mail w reCAPTCHA, aby uniemożliwić spamerom jego wyświetlenie: egzamin...@example.com.

    Część Mailhide biblioteki PHP wymaga modułu mcrypt PHP.

    Interfejs Mailhide API składa się z 2 funkcji recaptcha_mailhide_html i recaptcha_mailhide_url. Funkcje mają te same parametry. Wersja _html zwraca kod HTML, który możesz umieścić bezpośrednio na stronie. Przekazywana część e-maila z nazwą użytkownika jest obcięta i zastępowana linkiem wywołującym Mailhide. Wersja z zastosowaniem _url udostępnia adres URL do zdekodowania e-maila i pozostawia tylko możliwość umieszczenia go w kodzie HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html;
    Parametr
    $pubkey – ciąg znaków Klucz publiczny Mailhide ze strony rejestracji
    $privkey -- ciąg Klucz prywatny Mailhide ze strony rejestracji
    $email – ciąg Adres e-mail, który chcesz ukryć.

    Ten przykład pokazuje, jak korzystać z 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>