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("Вы не прошли проверку.");
}
?>
На этом у меня всё.