Простая капча на PHP

Что такое капча и для чего она писать небуду, с этой информацией вы можете ознакомиться в википедии

Создаем сам файл captcha.php, где и будет формироваться сама картинка с капчей. Для работы скрипта необходимо включить расширение php GD и шрифт comic.ttf (можете использовать свои шрифты)

Содержимое captcha.php:

<?php 

// Задаем список символов, используемых в капче 
$capletters = 'ABCDEFGKIJKLMNOPQRSTUVWXYZ123456789';  
// Длина капчи 7 знаков 
$captlen = 7;  

// Устанавливаем размеры изображения 
$capwidth = 120; $capheight = 20;  

// Подключаем шрифт 
$capfont = 'font/comic.ttf';  

 // Размер нашего текста 
$capfontsize = 14; 

// Переопределяем HTTP заголовок, чтобы контент нашего  
// скрипта представлял собой не текст, а изображение 
header('Content-type: image/png');  

// Формируется изображение с указанными ранее размерами 
$capim = imagecreatetruecolor($capwidth, $capheight);  

// Устанавливаем необходимость применения альфа канала (прозрачности) 
imagesavealpha($capim, true);  

// Устанавливаем цвет фона, в нашем случае - прозрачный 
$capbg = imagecolorallocatealpha($capim, 0, 0, 0, 127); 

// Устанавливаем цвет фона изображения 
imagefill($capim, 0, 0, $capbg);  

// Задаем начальное значение капчи 
$capcha = ''; 

// Запускаем цикл заполнение изображения 
for ($i = 0; $i < $captlen; $i++){ 

// Из нашего списка берем «рендомный» символ и добавляем в капчу 
$capcha .= $capletters[rand(0, strlen($capletters)-1) ];  

// Вычисление положения символа по X оси 
$x = ($capwidth - 20) / $captlen * $i + 10; 

// Добавим «рендомности» в это положение. 
$x = rand($x, $x+5);  

// Находим положение по Y оси 
$y = $capheight - ( ($capheight - $capfontsize) / 2 );  

// Укажем случайный цвет для символа. 
$capcolor = imagecolorallocate($capim, rand(0, 100), rand(0, 100), rand(0, 100) );  

// Наклон для символа 
$capangle = rand(-25, 25);  

// Рисуем созданный символ, применяя все описанные параметры 
imagettftext($capim, $capfontsize, $capangle, $x, $y, $capcolor, $capfont, $capcha[$i]); 

} // Закрываем цикл 

// Создаем переменную, куда будет сохранена капча,  
// с ней будет сравниваться введенный пользователем текст 
session_start(); 

$_SESSION['capcha'] = $capcha; 

imagepng($capim); // Выводим картинку. 

imagedestroy($capim); // Очищаем память. 

?>

В файле проверки формы (капчи), примерно такое

<?php 
// Проверяем если капча была введена 
if ( isset($_POST['capcha']) ) {
	$code = $_POST['capcha']; // Получаем переданную капчу. 
	session_start(); 

	// Сравниваем введенную капчу с сохраненной в переменной в сессии 
	if(isset($_SESSION['capcha']) && strtoupper($_SESSION['capcha']) == strtoupper($code)) {
		echo 'Капча введена правильно';
	}else{
		echo 'Капча введена не верно';
	}
	
	// Удаляем капчу из сессии 
	unset($_SESSION['capcha']);

	exit();
}
?>

В форму необходимо добавить нашу капчу:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
	<img src="captcha.php" width="120" height="20" /><br />
	Введите капчу: <input type="text" name="capcha" /><br />
	<input type="submit" value="Отправить" />
</form>
Рубрики: Development, Статьи
Метки: , ,

Комментарии (8)

  • В фале проверки формы (капчи), примерно такое
    а как его обозвать?

    • Вы этот код можете прописать прямо в файле с формой или вынести его в отдельный файл с названием form.php, но в форме укажите в action путь до файла form.php

      • Мне его нужно в torrentpier запилить, так как гугол аккаунт меня не устраивает

      • Проблемы в этом нет.
        Если с нуля форма то — сделайте два файла: 1. сама капча 2. обработка введенной капчи и все… Ну только про форму не забудте
        Если в существующую то данные из form.php нужно в ваш обработчик формы подставить, а в остальном все остается как есть.

  • Есть небольшая сложность TorrentPier настроен на recapcha, получается данные из form я вставляю место данных с параметрами recapcha?
    <form method="post" action="»>

    Введите капчу:

  • Сайт пока не может обработать этот запрос.
    HTTP ERROR 500
    вот такая реакция

  • как мне увидеть ваш скайп? спасибо

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *