В этой статье я покажу, как устроен скрипт отображающий картинку – защитный код, а так же принцип работы этого php скрипта. Данного типа скрипт еще имеет название капча (CAPTCHA).
Сначала создаем php файл, который будит создавать картинку. Подробный принцип как создать картинку с помощью PHP я показал в той статье.
Назовем этот файл, допустим, code.php и смело, копируем в него этот код:
<?php
session_start();
$code= array_merge( range('A', 'H'), array('K', 'M', 'N', 'P'), range('R', 'V'), range('X', 'Z'), range('1', '9'));
$_SESSION['code'] ='';
for ($i = 0; $i < 3; $i++)
$_SESSION['code'] .= $code[array_rand($code)];
$im = imagecreate(70, 20);
imagecolorallocate($im, 255, 255, 255);
$color = imagecolorallocate($im, 0, 125, 0);
imagettftext($im,16,0,6,17, $color, "oreos.ttf", $_SESSION['code']);
header('Content-Type: image/png');
imagepng($im);
?>
Сразу хочу обратить ваше внимание на 2 момента:
Первый. Функция session_start(); должна находиться самой-самой первой строкой. В противном случае вам выдаст ошибку.
Второй. Обратите внимание на строку:
imagettftext($im,16,0,6,17, $black, "/oreos.ttf", $_SESSION['code']);
Само название функции говорит уже, что в ней присутствует не встроенный TrueType шрифт, а тот шрифт, который мы сами загрузили. Это очень хорошо. Возьмите любой, понравившийся вам шрифт, поместите его в ту папку, где будет пхп файл с этим кодом. И в место oreos.ttf впишите название своего шрифта.
С моим шрифтом, картинки имеют такой вид:
Как на мой взгляд очень симпатичные.
И еще, лично мое мнение, достаточно 3 знаков хорошо читабельных символов для защиты от злостных ботов-спамеров. В моем случае, вероятность угадать код составляет 1 к 27000. Если много символов и они плохо читаются, то это сильно раздражает пользователей, а мы ведь этого не хотим :).
Второй шаг. Создаем php-файл, например, register.php где у нас и будит наша страница, на которой стоит защита. И так же смело копируем туда этот php код:
<?php
session_start();
?>
<img src="code.php" />
<form method="post">
Введите число: <input type="text" name="getСode">
<input name="sub" type=submit value="Ок!">
</form>
<?php
if(isset($_POST['sub']))
{
if($_POST['getСode'] == $_SESSION['code'])
{
echo "Верно!";
}
else
{
echo "Число введено неверно!";
}
}
?>
И опять я повторяю, что функция session_start(); должна находиться перед любым другим кодом. Простым словом, она должна стоять первой строкой.
Функция session_start(); создает сессию (или сеанс) в котором содержиться суперглобальный массив $_SESSION и через куки передает $_SESSION всем скриптам где есть сессия session_start();