Открыть меню    

Простая капча на 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 "вы весьма надоедливый бот!";
	}
?>
 

Источник

Комментарии к статье

аватарка пользователя
2013-04-17
Тест

Тест

аватарка пользователя
2013-06-27
Будем пробывать

СПС а вот тебе seo продвижение: Как на php узнать IP пользователя вот скрипт:<?php echo 'Ваш IP: '.$_SERVER['REMOTE_ADDR'];?>

аватарка пользователя
2013-06-27
222

test

аватарка пользователя
2013-06-27
dnzl

test

аватарка пользователя
2013-08-07
Евгений

подскажите пожалуста как добавить капча в форму обратной связи

аватарка пользователя
2013-08-10
Николай

Круто! Спасибо за статью!!! Сделал себе капчу какую хотел.

аватарка пользователя
2013-08-26
тест

тест

аватарка пользователя
2013-09-03
fg

тест

аватарка пользователя
2013-09-29
dnzl

тест - работает)

аватарка пользователя
2013-10-04
ya

проверка связи ау

аватарка пользователя
2013-10-04
dnzl

связь есть)

аватарка пользователя
2013-10-24
Роберт

Сделал все, как в уроке, но не работает проверка на валидность.

аватарка пользователя
2013-10-24
dnzl

а она тут есть, капча проверяет введенную сумму цифр и выводит соотв. сообщение, если введено все правильно-вы не робот, если нет-выробот...моя капча, котор работает здесь на сайте, аяксом отправляет данные, проверяет на валидность, проверяет цифры и дает результат

аватарка пользователя
2013-10-24
Роберт

Я в 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>";
}
?>
Не допру, как мне привязать проверку капчи. В данном случае проверка не работает

аватарка пользователя
2013-10-24
Роберт

Вывод session_start() ничего не дает

аватарка пользователя
2013-10-24
dnzl

тут идет проверка только лишь адекватности введенного числа, и ставится условие, по которому и будет выводиться ответ. делайте обработку формы, где ставите проверку не только на число, но и на поля, соотв-нно, азы php надо знать

аватарка пользователя
2013-12-09
ь

тест

аватарка пользователя
2013-12-09
5

тест

аватарка пользователя
2013-12-09
в

Меняется но только при обновлении страницы. отстой.

аватарка пользователя
2013-12-09
тест

проверил, меняется, просто скрипт доработайте, включите глоову

аватарка пользователя
2014-02-03
Виктор

Классная капча!

аватарка пользователя
2014-03-26
TomAlko

У каво там чё неменяется!!!
Всё работает как часики если включить воображалку...
Вот тебе обновленеи
<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();
?>
Далее просто правельно раставить.

аватарка пользователя
2014-05-12
тест

тесттест

аватарка пользователя
2014-05-12
тест

хреново проходят

аватарка пользователя
2014-06-03
Victor

test

аватарка пользователя
2014-06-26
bot

im bot and am break you capcha/ hohoho!))

аватарка пользователя
2014-07-29
wetwe

test

аватарка пользователя
2014-08-22
Тест

Тест

аватарка пользователя
2014-09-11
aaa

а ну проверим )

аватарка пользователя
2014-10-01
Phantom[SAN]

Как раз, то, что я искал. Большое спасибо, реально помогли.

аватарка пользователя
2014-10-08
Aleks


+1

аватарка пользователя
2015-04-15
bot

test

аватарка пользователя
2015-04-17
test

test

аватарка пользователя
2015-05-18
сисян

Отличный код,,,,, работает,доволен

аватарка пользователя
2015-06-05
Евгений

Автору огромное спасибо, его капча работает у меня на сайте 2 года.
Можете убедиться сами bseti.by кнопка "заказать звонок", кликом по капче обновляется контрольный вопрос.

аватарка пользователя
2015-06-19
тест

тест

аватарка пользователя
2015-11-02
Степан

То что искал!

аватарка пользователя
2016-01-31
уууух

тест 110

аватарка пользователя
2016-02-10
Евгений

Классный скрипт!
заменил генерацию на буквенно-цифровую + шрифт monotype corsiva и без пол-литры не разберешься ))))

аватарка пользователя
2016-11-21
полезно

спасибо за код

аватарка пользователя
2016-12-27
Артём

Спасибо, работает.

аватарка пользователя
2017-01-10
Denis

test

аватарка пользователя
2017-02-05
Сергеян

На сайте ojooo графическая капча надо обводить ее есть ли скрипт для нее чтоб разгадывал

аватарка пользователя
2017-04-30
flash

проверка

аватарка пользователя
2017-06-23
Рома

Первый нах!

аватарка пользователя
2017-07-15
тест

отлично

аватарка пользователя
2017-07-30
Влад

Попробовал вашу капчу. На моем локальном компе все работает. А заливаю на свой ВПС, то не работает. Картинка не генерится. Что в настройках ВПС должно быть включено?

аватарка пользователя
2017-08-13
Евгений

Не корректно не много работает.Любые цифры пишешь и коментарии проходят.Как сделать проверку,что правильно цифры указал?

аватарка пользователя
2017-09-23
Руслан

Спасибо, будем посмотреть

аватарка пользователя
2017-10-01
апр

апрап

аватарка пользователя
2017-10-01
uuu

тест

аватарка пользователя
2017-12-20
Ramil

Awesome, СПС!

аватарка пользователя
2017-12-20
Ramil

А на обход капчи при парсинге на PHP есть что ?

аватарка пользователя
2018-01-03
*

test

аватарка пользователя
2018-01-05
junior

captcha

аватарка пользователя
2018-01-27
test

test

аватарка пользователя
2018-02-15
Вуки

Тест

аватарка пользователя
2018-02-16
йцу

тест

аватарка пользователя
2018-02-16
цук

тест

аватарка пользователя
2018-03-04
Ау

Просто проверка.

аватарка пользователя
2018-04-24
test

test

аватарка пользователя
2018-05-06
24

Картинка не отображается, ни в хроме, ни в других браузерах

аватарка пользователя
2018-08-17
яя

супертест

аватарка пользователя
2018-08-24
Freddy

круто

аватарка пользователя
2018-09-12
Евгений

Проверка

аватарка пользователя
2018-09-19
Евгений

тест

аватарка пользователя
2018-10-05
Дмитрий

Спасибо

аватарка пользователя
2019-01-08
бот

Я Смог!!

аватарка пользователя
2019-02-10
123

123

аватарка пользователя
2019-02-15
Дима

Проверка!

аватарка пользователя
2019-02-21
олщрщшощшо

гшргшршг

аватарка пользователя
2019-03-11
тест

тесттест

аватарка пользователя
2019-03-11
тест

тесттест

аватарка пользователя
2019-03-27

Aaaaaaa

аватарка пользователя
2019-03-27
gjsfjsfgj

tryjsgjsf

аватарка пользователя
2019-04-27
ппппппппппп

роропро

аватарка пользователя
2019-06-10
тььь

тест

аватарка пользователя
2019-06-14
ыы

ыыы

аватарка пользователя
2019-07-07
Alexander43

Good program, thank you man)

аватарка пользователя
2019-07-07
Alexander43

Good program, thank you man)

аватарка пользователя
2019-07-18
test

111

аватарка пользователя
2019-08-12
сччссп

ссчпссчспсчс

аватарка пользователя
2019-09-29
тест

тест

аватарка пользователя
2019-10-26
уууу

тест

аватарка пользователя
2019-11-27
1

1

аватарка пользователя
2019-11-29
1

1

аватарка пользователя
2019-12-21
r

тест

аватарка пользователя
2020-01-28
1

тест

аватарка пользователя
2020-01-29
1

test

аватарка пользователя
2020-03-12
Hvg

Huyyy

аватарка пользователя
2020-03-25
54213355

66666666666666666666666+6666666666666666666666666666+6=(9999999999999999-8888888888888888)*6

аватарка пользователя
2020-04-12
gerger

gerge

аватарка пользователя
2020-04-12
gerger

gerge

аватарка пользователя
2020-04-12
gerger

gerge

аватарка пользователя
2020-04-27
а

а

аватарка пользователя
2020-05-05
залупа

ывпыпыаппв шлюхи москвы

аватарка пользователя
2020-05-21
ыва

ыва

аватарка пользователя
2020-05-27
34534

34534

аватарка пользователя
2020-05-27
34534

34534

аватарка пользователя
2020-05-27
34534

34534

аватарка пользователя
2020-05-28
генген

енгенг

аватарка пользователя
2020-05-29
rr

ggg

аватарка пользователя
2020-07-09
Человек

Человек тестит капчу... Человек доволен!

аватарка пользователя
2020-08-21
Игорь

Тест

аватарка пользователя
2020-10-12
Stas

Ntcn

аватарка пользователя
2020-12-23
yyy

тест

Добавить комментарий

настилы для хомутовых лесов;дизайн проект студии;амбре окрашивание волос фото на темные волосы средней с челкой;пирог на день рождения на заказ;lonking cdm312