Создание CAPTCHA на PHP

В этом уроке продолжаем защищаться от спамеров. В уроке по Созданию расширенной формы обратной связи я описывал, как создавать проверку вводимых данных. В этом уроке мы с вами поговорим еще про один способ защиты от спамеров – это CAPTCHA. Как вы, наверное, уже догадались, в этом уроке мы будем создавать CAPTCHA.

Для начала создадим простую форму.


 <form action="" method="post" name="form">
 <p>Имя:</p>
 <input name="name" type="text" />
 <p>E-mail:</p>
 <input name="email" type="text" />
 <input name="send" type="submit" value="Отправить" />
 </form>
 

Теперь приступит к созданию защиты от спамеров. CAPTCHA – это изображение состоящее из случайных символов.

Для реализации CAPTCHA нам прейдет на помощь PHP. Давайте создадим сценарий, который будет генерировать случайное изображение.


 <?php 
 session_start(); 
 header("Expires: Mon, 26 Jul 2010 05: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");
 function _generateRandom($length=6) { 
 $_rand_src = array( 
 array(48,57) //цифры
 , array(97,122) //строчные символы 
 //, array(65,90) случайные символы 
 ); 
 srand ((double) microtime() * 1000000); 
 $random_string = ""; 
 for($i=0;$i<$length;$i++){ 
 $i1=rand(0,sizeof($_rand_src)-1); 
 $random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1])); 
 } 
 return $random_string; 
 }
 $im = @imagecreatefromjpeg("captcha.jpg");// Любая картинка
 $white = ImageColorAllocate ($im, 255, 255, 255); 
 $black = ImageColorAllocate ($im, 0, 0, 0); 
 $rand = _generateRandom(3); 
 $_SESSION['captcha'] = $rand; 
 ImageString($im, 5, 2, 2, $rand[0]." ".$rand[1]." ".$rand[2]." ", $black); 
 $rand = _generateRandom(3); 
 ImageString($im, 5, 2, 2, " ".$rand[0]." ".$rand[1]." ".$rand[2], ImageColorAllocate ($im, 255, 0, 0)); 
 Header ('Content-type: image/jpeg'); 
 imagejpeg($im,NULL,100); 
 ImageDestroy($im); 
 ?>
 

Для реализации CAPTCHA мы будем использовать сессии. На какой странице Вам необходимо реализовать CAPTCHA, откройте сессию.

<?php session_start() ?>

Теперь создадим проверку ввода CAPTCHA. Если пользователь введет правильно, будут выполняться действия, отправка на электронную почту, добавление комментария и т.д.


 if($_SESSION["captcha"]==$_POST["captcha"]) { 
 //CAPTHCA совпадает. Идет выполнение действий.
 } 
 

Наконец присоединим нашу CAPTCHA к форме.


 <?php session_start() ?> 
 <form action="" method="post" name="form">
 <p>Имя:</p>
 <input name="name" type="text" />
 <p>E-mail:</p>
 <input name="email" type="text" />
 <input name="send" type="submit" value="Отправить" />
 </form> 
 <?php 
 if(isset($_POST["captcha"])) 
 if($_SESSION["captcha"]==$_POST["captcha"]) { 
 //CAPTHCA совпадает. Идет выполнение действий
 echo 'CAPTHCA совпадает'; 
 } else { 
 echo 'CAPTHCA не совпадает, попробуйте еще раз.'; 
 } 
 ?>
 

Вот и все. Этот простой способ поможет вам защититься от спамеров.

P.S. сценарий создания CAPTCHA лучше всего размещать в файле с формой.

Понравился урок? Добавьте его к себе в закладки.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *