Captcha от роботов на php

Для максимальной защиты от ботов, я настоятельно рекомендую пользоваться сервисом reCAPTCHA от Google, но если вы всё таки решились сделать свою собственную каптчу на php - тогда эта статья для вас.
Для создания капчи нам нужна установленная библиотека GD, но если версия вашего php выше 4.3 - то вам ничего устанавливать не нужно. Чтобы проверить версию php, просто добавьте код phpinfo(); в какой-нибудь php файл и выполните его.
Итак, приступим. Для начала создайте файл captcha.php и вставьте в него следующий код:

<?php
// Открываем сессию
  session_start();
// Создаем рандомное число и сохраняем в сессию
  $random_num = rand(1000, 9999);
  $_SESSION['random_num'] = md5($random_num);
// Создаем само изображение
  $im = imagecreatetruecolor(100, 38);
// Выбираем цвета по стандарту RGB
  $white = imagecolorallocate($im, 255, 255, 255);
  $grey = imagecolorallocate($im, 128, 128, 128);
  $black = imagecolorallocate($im, 0, 0, 0);
  imagefilledrectangle($im, 0, 0, 200, 35, $black);
// Подключаем понравившийся шрифт в формате ttf
  $font = '/catalog/fonts/font.ttf';
// Пишем текст
  imagettftext($im, 35, 0, 22, 24, $grey, $font, $random_num);
  imagettftext($im, 35, 0, 15, 26, $white, $font, $random_num);
// Отключаем кэширование изображения
  header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
// Показываем изображение в формате gif
  header ("Content-type: image/gif");
  imagegif($im);
  imagedestroy($im);
?>

Информацию мы будем хранить в сессиях под названием random_num. Теперь создадим файл test.php, куда разместим саму капчу и напишем небольшой скрипт для проверки.

<!DOCTYPE html>
<html>
<head>
  <title>Web Фишки - Форма с капчей</title>
</head>
<body>
  <form method="post" action="test.php">
    <input class="input" type="text" name="norobot" />
    <img src="captcha.php" />
    <input type="submit" value="Проверить" />
  </form>
</body>
</html>
<?php
session_start();
// Проверим в сессиях, прошел ли пользователь проверку и выдадим соответствующее сообщение
if (md5($_POST['norobot']) == $_SESSION['random_num'])	{ 
  echo "Вы успешно прошли проверку.";
}else {  
  exit("Вы не прошли проверку.");
}
?>

На этом у меня всё.

Комменарии

Написать комментарий

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Защита от роботов