Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab2_php.doc
Скачиваний:
2
Добавлен:
27.08.2019
Размер:
261.12 Кб
Скачать

Лабораторная работа по PHP №2

Защита от автоматической регистрации

Цель работы: изучение способов защиты от автоматической регистрации; знакомство с библиотекой GD и механизмом сессий.

Одним из способов защиты от автоматической регистрации является генерация изображения со случайным текстом, который должен ввести пользователь для подтверждения регистрации. На изображение, как правило, кроме основного текста, добавляется шум, для предотвращения попыток программного распознавания текста на изображении. Пример такой защиты можно видеть на рисунке 1.

Рисунок 1 – Вариант защиты от автоматической регистрации с помощью изображения

Задание

Создать форму для регистрации пользователя. Помимо основных полей (имя пользователя, фамилия, электронный адрес и др.) в форме должно присутствовать поле для ввода текста, который содержится на изображении. При каждом запуске скрипт должен создавать новое изображение на странице со случайным текстом. Кроме того, на изображении должны присутствовать случайные элементы (линии, точки, сетка, фон и др.), затрудняющие программное распознавание текста.

Для формирования изображения необходимо использовать функции библиотеки GD.

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

Теория и примеры

1 Библиотека gd

PHP не ограничен генерацией HTML-документов. Он также может использоваться для создания, редактирования и вывода изображений в различных форматах, что позволяет создавать изображения, которые генерируются динамически по запросу браузера.

Создание нового изображения (основанного на палитре) – imagecreate

resource imagecreate (int x_size, int y_size)

Возвращает идентификатор пустого изображения с размерами x_size, y_size.

Создание нового полноцветного изображения – imagecreatetruecolor

resource imagecreatetruecolor (int x_size, int y_size)

Возвращает идентификатор пустого полноцветного изображения с размерами x_size, y_size.

Создание нового изображения– imagecreateаfrompng

resource imagecreatefrompng (string filename)

Возвращает идентификатор изображения, полученного из файла filename (строка filename должна указывать на файл с изображением в формате PNG).

Освобождение ресурса изображения – imagedestroy

bool imagedestroy (resource image)

Освобождает память, связанную с изображением image. image – идентификатор изображения, возвращаемый одной из функций для создания изображения, например, imagecreatetruecolor().

Вывод изображения в формате PNG – imagepng

bool imagepng (resource image [, string filename])

Выводит поток изображения в формате PNG на стандартный поток вывода (как правило, связанный с браузером), либо в файл filename, если задан этот аргумент.

Пример 1 Простейшее использование средств библиотеки GD – генерация изображения по запросу

Листинг файла button.php

<?php

$image = imagecreatefrompng('image.png');

Header('Content-type: image/png');

imagepng($image);

imagedestroy($image);

?>

Листинг html-файла

<html>

...

<img src='button.php'>

...

</html>

Создание нового цвета – imagecolorallocate

int imagecolorallocate (resource image, int red, int green, int blue)

Создает новый цвет для изображения image. red, green и blue – красная, зеленая и синяя составляющие создаваемого цвета соответственно. Эти параметры являются должны быть целыми числами в диапазоне от 0 до 255 (от 0x00 до 0xff – в шестнадцатеричной системе). Функция imagecolorallocate должна быть вызвана для создания каждого цвета, который будет использоваться в изображении image.

Возвращает идентификатор созданного цвета или –1 в случае ошибки.

Пример 2 Использование imagecolorallocate

<?php

$im = imagecreate('example.jpg', 100, 100);

// определим черный и белый цвета для изображения

$white = imagecolorallocate($im, 255, 255, 255);

$black = imagecolorallocate($im, 0, 0, 0);

// другой способ

$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);

$black = imagecolorallocate($im, 0x00, 0x00, 0x00);

?>

Если функция imagecolorallocate вызывается для изображения с палитрой и все цвета палитры определены, то новый цвет не создается, а возвращается идентификатор наиболее похожего цвета из палитры. Если нет необходимости в создании нового цвета можно воспользоваться функцией imagecolorclosest.

Получение индекса заданного цвета из палитры – imagecolorclosest

int imagecolorclosest (resource image, int red, int green, int blue)

Возвращает индекс цвета из палитры цветов изображения, наиболее соответствующего заданному RGB-значению.

Функция работает следующим образом. Каждый цвет рассматривается как точка в трехмерном пространстве RGB. Возвращается индекс цвета (точки), которая находится ближе к желаемому цвету (точке).

Функция ищет ближайший только среди цветов, использующихся в изображении, даже если палитра содержит большее количество цветов.

Получение размеров изображения – imagesx, imagesy

int imagesx (resource image)

Возвращает ширину изображения image.

int imagesy (resource image)

Возвращает высоту изображения image.

Задание прозрачного цвета – imagecolortransparent

int imagecolortransparent (resource image, int color)

Устанавливает цвет, заданный в color прозрачным для изображения image. Некоторые форматы, например JPEG не поддерживают прозрачные цвета.

Рисование точки – imagesetpixel

bool imagesetpixel (resource image, int x, int y, int color)

Устанавливает пикселу с координатами x, y (верхний левый угол изображения имеет координаты 0, 0) цвет color для изображения image.

Получение цвета точки – imagecolorat

int imagecolorat (resource image, int x, int y)

Возвращает цвет пиксела с координатами x, y для изображения image.

Пример 3 Негатив изображения

<?php

function reverse_image_from_png($filename)

{

$im = ImageCreateFromPng($filename);

for($i = 0; $i < ImageSX($im); $i++)

for($j = 0; $j < ImageSY($im); $j++){

$pix = ImageColorAt($im, $i, $j);

$pix_r = ~$pix;

ImageSetPixel($im, $i, $j, $pix_r);

}

return $im;

}

?>

Рисование линии – imageline

bool imageline (resource image, int x1, int y1, int x2, int y2, int color)

Рисует линию от пиксела с координатами x1, y1 к пикселу с координатами x2, y2 цвета color на изображении image.

Вывод текста в изображении – imagestring

bool imagestring (resource image, int font, int x, int y, string s, int col)

Рисует строку s на изображении image. Координаты верхнего левого угла строки задаются координатами x, y. Если font равно 1, 2, 3, 4 или 5 используются встроенные шрифты.

Пример4 – Создание надписей на кнопках. Данный код позволяет избежать рисования новой кнопки, если необходимо изменить на ней надпись.

Листинг файла text_button.php

<?php

header("Content-type: image/png");

$string = $_GET['text'];

$im = ImageCreateFromPng("images/button1.png");

$orange = ImageColorAllocate($im, 220, 210, 60);

$px = (ImageSX($im) - 7.5 * strlen($string)) / 2;

ImageString($im, 3, $px, 9, $string, $orange);

ImagePng($im);

ImageDestroy($im);

?>

Листинг html-файла

<html>

...

<img src='text_button.php?text=links'>

<img src='text_button.php?text=map'>

<img src='text_button.php?text=search'>

...

</html>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]