У цій статті я покажу, як влаштований скрипт, який відображає картинку - захисний код, а так же принцип роботи цього 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();