Капча на php

Капча на php

Привіт, шановні Новомосковсктелі блогу LifeExample. сьогодні я хочу виділити трохи часу для ознайомлення з необхідним елементом для захисту сайту. Створена, нами капча на PHP допоможе вам захистити свій сайт від спаму.

Перед тим як почати розробку капчи на PHP. давайте розставимо всі крапки над i. і розберемося, звідки взялося це не зрозумілу назву і що воно означає.

Що таке капча

Сьогодні задавши, будь-якого веб-майстру, питання: "Що таке капча?". Ми напевно почуємо: "Капча - це засіб захисту від спам роботів". І в принципі це правильно, але давайте зануримося в історію, для того щоб дізнатися більше точну відповідь на це питання.

В ті часи і по сей день, вчені і програмісти багатьох університетів так і не створили штучного інтелекту, еквівалентного людському розуму. Незважаючи на це, праці Тюрінга знайшов відмінне застосування в повністю автоматизованому публічному тесті Тьюринга для розрізнення комп'ютерів і людей (Completely Automated Public Turing test to tell Computers and Humans Apart) скорочено CAPCHA.

Тепер нам стало ясно, що слово CAPTCHA Дайте відповідь - це лише транскрипція абревіатури CAPCHA. приховує за собою довгу розшифровку.

Таким чином, відповідаючи на питання: "Що таке капча?", Можна сміливо стверджувати, що це тест для розрізнення комп'ютерів і людей. А так як за допомогою капчі ми можемо точно визначити, хто відправив відповідь, людина або машина, то запросто можна застосувати це в своїх цілях.

Ну ось, я здається задовольнив свої письменницькі потреби, і можу приступити до створення капчі на PHP.

Як зробити капчу

Якщо попросити яндекес або гугл, видати нам відповідь на дане питання, то можна натрапити на багато пропонуємих рішень. Почавши розбиратися з алгоритмами роботи, я прочитав багато порад і прикладів реалізації капчи на PHP. Що дозволило мені зробити певні висновки, і реалізувати скрипт таким чином щоб він відповідав моїм вимогам.

Мені необхідно було створити скрипт "Капча на PHP" вимагає мінімум зусиль і відповідає змісту цього захисту.

Для створення примітивної, але відповідає всім канонам захисту, нам буде потрібно мати п'ять файлів:

  1. index.php - скрипт виводить нашу капчу на PHP;
  2. validator.php - скрипт перевіряє схожість з картинкою;
  3. capcha.php - скрипт генерує картинку;
  4. comic.ttf - шрифт тексту;
  5. bg_capcha.png - фон під текстом.

Давайте по порядку, перше що ми хочемо зробити це вивести картинку, для цього в файлі index.php Пишемо такі рядки:

Введіть код з малюнка:








Тут варто звернути увагу на вказаний в атрибуті src. Чи не характерно для нього файл з розширенням php. Вся справа в тому що файл captcha.php хоч і є скриптом, але повертає відповідь у вигляді зображення в форматі png цілком підходящий для тега
img.

Погляньмо на код скрипта генерірующіего картинку:

$ Letters = 'ABCDEFGKIJKLMNOPQRSTUVWXYZ'; // алфавіт

$ Caplen = 6; // довжина тексту
$ Width = 120; $ Height = 40; // ширина і висота картинки
$ Font = 'comic.ttf'; // шрифт тексту
$ Fontsize = 14; // розмір тексту

header # 40; 'Content-type: image / png' # 41; ; // тип повертається вмісту (картинка в форматі PNG)

$ Im = imagecreatetruecolor # 40; $ Width. $ height # 41; ; // створює нове зображення
imagesavealpha # 40; $ Im. true # 41; ; // встановлює прозорість зображення
$ Bg = imagecolorallocatealpha # 40; $ Im. 0. 0. 0. 127 # 41; ; // ідентифікатор кольору для зображення
imagefill # 40; $ Im. 0. 0. $ bg # 41; ; // виконує заливку кольором

putenv # 40; 'GDFONTPATH ​​='. realpath # 40; '.' # 41; # 41; ; // перевіряє шлях до файлу зі шрифтами

$ Captcha = ''; // Обнуляємо текст
for # 40; $ I = 0; $ i <$caplen ; $i ++ )
# 123;
$ Captcha. = $ Letters # 91; rand # 40; 0. strlen # 40; $ letters # 41; - 1 # 41; # 93; ; // дописуємо випадковий символ з алфавіт
$ X = # 40; $ Width - 20 # 41; / $ Caplen * $ i + 10; // відстань між символами
$ X = rand # 40; $ X. $ X + 4 # 41; ; // випадковий зсув
$ Y = $ height - # 40; # 40; $ Height - $ fontsize # 41; / 2 # 41; ; // координата Y
$ Curcolor = imagecolorallocate # 40; $ Im. rand # 40; 0. 100 # 41 ;. rand # 40; 0. 100 # 41 ;. rand # 40; 0. 100 # 41; # 41; ; // колір для поточної літери
$ Angle = rand # 40; - 25. 25 # 41; ; // випадковий кут нахилу
imagettftext # 40; $ Im. $ Fontsize. $ Angle. $ X. $ Y. $ Curcolor. $ Font. $ captcha # 91; $ i # 93; # 41; ; // виведення тексту
# 125;

// відкриваємо сесію для збереження згенерованого тексту
session_start # 40; # 41; ;
$ _SESSION # 91; 'Capcha' # 93; = $ Captcha;

imagepng # 40; $ im # 41; ; // виводимо зображення
imagedestroy # 40; $ im # 41; ; // відчищаємо пам'ять

session_start # 40; # 41; ;
if # 40; $ _POST # 91; 'Capcha' # 93; ! = $ _SESSION # 91; 'Capcha' # 93; # 41;
echo "Текст з картинки введений не вірно!" ;
else
echo "Ура текст збігся!" ;

В результаті у мене вийшов легкий, і легко вбудовується скрипт капчи на PHP

Загалом, з одногруппником робимо сайт, ми ось зробили php сторінку, одночасно перевіряє введені логін пароль, одночасно є html сторінкою (html код засунули в print 'ось сюди', інакше поки не вміємо), в цьому html у нас є таблиця - де знаходиться 2 стовпці, і рядки логін / поле для введення логіна, пароль / поле для введення пароля, все працює нормально, але коли я додаю ваші


Введіть код з малюнка:





у нас сторінка в інтернеті перестає прогружаются, тобто тупо білий аркуш замість нашого login.php.
Не знаєте, чому так може бути?