Простая капча на PHP
Перед вами простой основанный на PHP/GD скрипт капчи, который поможет предотвратить поток спама. Капча предназначена для гостевых книг, форм обратной связи и любых других приложений способных воспроизвести спам посредством веб-ботов.
Ниже, кликнув по ссылке, вы можете скачать скрипт капчи:
Все что нам нужно: PHP с библиотекой GD (начиная с версии PHP 4.3 входит в стандартную поставку интерпретатора) и шрифт формата true type. Данный шрифт пригодится для создания изображения.
Сперва создайте PHP файл, который будет генерировать изображения, например, captcha.php
.
Работу скрипта можно увидеть внизу, в форме для отправки комментариев к статье.
PHP
<?php
session_start();
// создаем случайное число и сохраняем в сессии
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
//создаем изображение
$im = imagecreatetruecolor(100, 38);
//цвета:
$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);
//путь к шрифту:
$font = '/var/www/font.ttf';
//рисуем текст:
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
// предотвращаем кэширование на стороне пользователя
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");
//отсылаем изображение браузеру
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
Ниже приведен код с формой, в которой содержитя путь к файлу captcha.php
.
HTML
<html>
<head>
<title>HTML форма с капчей PHP</title>
</head>
<body>
<form method="post" action="write.php">
<input class="input" type="text" name="norobot" />
<img src="captcha.php" />
<input type="submit" value="Submit" />
</form>
</body>
</html>
Далее нам потребуется файл, в котором будет проверяться валидность капчи и введенные пользователем значения. Связать этот файл с формой поможет атрибут тега form
action
, значение которого указывает на путь к файлу. Код данного файла может выглядеть следующим образом:
PHP
<?php
session_start();
if (md5($_POST['norobot']) == $_SESSION['randomnr2']) {
echo "Отлично , кажется, что вы не робот";
} else {
echo "вы весьма надоедливый бот!";
}
?>
Источник
Комментарии к статье
Тест
СПС а вот тебе seo продвижение: Как на php узнать IP пользователя вот скрипт:<?php echo 'Ваш IP: '.$_SERVER['REMOTE_ADDR'];?>
test
test
подскажите пожалуста как добавить капча в форму обратной связи
Круто! Спасибо за статью!!! Сделал себе капчу какую хотел.
тест
тест
тест - работает)
проверка связи ау
связь есть)
Сделал все, как в уроке, но не работает проверка на валидность.
а она тут есть, капча проверяет введенную сумму цифр и выводит соотв. сообщение, если введено все правильно-вы не робот, если нет-выробот...моя капча, котор работает здесь на сайте, аяксом отправляет данные, проверяет на валидность, проверяет цифры и дает результат
Я в php практически полный ноль.
У меня есть свой обработчик для формы обратной связи:
<?php
/* Здесь проверяется существование переменных */
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['tel'])) {$tel = $_POST['tel'];}
if (isset($_POST['sub'])) {$sub = $_POST['sub'];}
if (isset($_POST['body'])) {$body = $_POST['body'];}
if (isset($_POST['norobot'])) {$norobot = $_POST['norobot'];}
if (empty($name))
{
echo "<link rel='stylesheet' type='text/css' href='style.css'/><div align='center' class='warning_font1' align='left'><font color:#fff>Пожалуйста, напишите как к Вам обращаться!</font></div>";
echo "<link rel='stylesheet' type='text/css' href='style.css'/><p align='center'><a href='javascript:history.back()' class='all_links'>Вернуться к заполнению формы</a></div></p>";
exit;
}
if (empty($email))
{
echo "<link rel='stylesheet' type='text/css' href='style.css'/><div align='center' class='warning_font1' align='left'><font color:#fff>Вы не указали адрес электронной почты!</font></div>";
echo "<link rel='stylesheet' type='text/css' href='style.css'/><p align='center'><a href='javascript:history.back()' class='all_links'>Вернуться к заполнению формы</a></div></p>";
exit;
}
if (empty($body))
{
echo "<link rel='stylesheet' type='text/css' href='style.css'/><div align='center' class='warning_font1' align='left'><font color:#fff>Вы не ввели текст сообщения!</font></div>";
echo "<link rel='stylesheet' type='text/css' href='style.css'/><p align='center'><a href='javascript:history.back()' class='all_links'>Вернуться к заполнению формы</a></div></p>";
exit;
}
/* Капча*/
if (md5($_POST['norobot']) == $_SESSION['randomnr2'])
/* Сюда впишите свою эл. почту */
$address = "24878@bk.ru";
/* А здесь прописывается текст сообщения, \n - перенос строки */
$mes = "Имя: $name \nE-mail: $email \nТелефон: $tel \nТема: $sub \nСообщение: $body";
/* А эта функция как раз занимается отправкой письма на указанный вами email */
$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");
if ($send == 'true')
{
echo "
<link rel='stylesheet' type='text/css' href='style.css'/>
<table width='600' height='300' align='center'>
<tr>
<td class='warning_table' width='220' align='center' valign='middle'>
<img align='center' src='images/logo_feedback.png'>
<div align='center' class='warning_font_big'><font color:#fff>Поздравляем! </font></div>
<div align='center' class='warning_font' align='left'><font color:#fff>Ваше письмо доставлено. В ближайшее время Вы получите ответ.</font></div>
<p align='center'><a href='index.html' class='all_links'><font color:#fff>На главную страницу</font></a></div></p>
</td>
</tr>
</table>";
}
else
{
echo "
<link rel='stylesheet' type='text/css' href='style.css'/>
<table width='600' height='300' align='center'>
<tr>
<td class='warning_table' width='220' align='center' valign='middle'>
<img align='center' src='images/warning.png'>
<div align='center' class='warning_font_big'>ОШИБКА!!!</div>
<div align='center' class='warning_font' align='left'>Ваше письмо не доставлено. Повторите отправку немного позже!</div>
<p align='center'><a href='index.html' class='all_links'>На главную страницу</a></div></p>
</td>
</tr>
</table>";
}
?>
Не допру, как мне привязать проверку капчи. В данном случае проверка не работает
Вывод session_start() ничего не дает
тут идет проверка только лишь адекватности введенного числа, и ставится условие, по которому и будет выводиться ответ. делайте обработку формы, где ставите проверку не только на число, но и на поля, соотв-нно, азы php надо знать
тест
тест
Меняется но только при обновлении страницы. отстой.
проверил, меняется, просто скрипт доработайте, включите глоову
Классная капча!
У каво там чё неменяется!!!
Всё работает как часики если включить воображалку...
Вот тебе обновленеи
<script>
function reload(){
src="captcha.php";
document.captcha.src=src+'?rand='+Math.random();
}
</script>
<a href="javascript:void(0)" onclick="reload()" title="Refresh"><img src="captcha.php" name="captcha" alt="captcha" border="0" /></a>
<?php
session_unset();
session_destroy();
?>
Далее просто правельно раставить.
тесттест
хреново проходят
test
im bot and am break you capcha/ hohoho!))
test
Тест
а ну проверим )
Как раз, то, что я искал. Большое спасибо, реально помогли.
+1
test
test
Отличный код,,,,, работает,доволен
Автору огромное спасибо, его капча работает у меня на сайте 2 года.
Можете убедиться сами bseti.by кнопка "заказать звонок", кликом по капче обновляется контрольный вопрос.
тест
То что искал!
тест 110
Классный скрипт!
заменил генерацию на буквенно-цифровую + шрифт monotype corsiva и без пол-литры не разберешься ))))
спасибо за код
Спасибо, работает.
test
На сайте ojooo графическая капча надо обводить ее есть ли скрипт для нее чтоб разгадывал
проверка
Первый нах!
отлично
Попробовал вашу капчу. На моем локальном компе все работает. А заливаю на свой ВПС, то не работает. Картинка не генерится. Что в настройках ВПС должно быть включено?
Не корректно не много работает.Любые цифры пишешь и коментарии проходят.Как сделать проверку,что правильно цифры указал?
Спасибо, будем посмотреть
апрап
тест
Awesome, СПС!
А на обход капчи при парсинге на PHP есть что ?
test
captcha
test
Тест
тест
тест
Просто проверка.
test
Картинка не отображается, ни в хроме, ни в других браузерах
супертест
круто
Проверка
тест
Спасибо
Я Смог!!
123
Проверка!
гшргшршг
тесттест
тесттест
Aaaaaaa
tryjsgjsf
роропро
тест
ыыы
Good program, thank you man)
Good program, thank you man)
111
ссчпссчспсчс
тест
тест
1
1
тест
тест
test
Huyyy
66666666666666666666666+6666666666666666666666666666+6=(9999999999999999-8888888888888888)*6
gerge
gerge
gerge
а
ывпыпыаппв шлюхи москвы
ыва
34534
34534
34534
енгенг
ggg
Человек тестит капчу... Человек доволен!
Тест
Ntcn
тест