Рисуем в PHP - GD для начинающих
Опубликовано admin-ом в категории php
Когда-то, описывая тег hr, я обратил внимание, что это единственный тег в html, который хоть что-то рисует. И действительно, в html вся графика не рисуется а вставляется из внешних обьектов. Давным-давно, когда серверы были большими а процессоры у них были слабыми PHP тоже не умел рисовать - ведь он создавался для работы с текстом. Однако сегодня возросли как мощности серверов, так и потребности пользователей. В качестве примера динамически сгенерированных изображений могу привести всем известную CAPTCHA. Или водяные знаки для картинок - так называемые wotermark. Или динамические юзербары для форумов. Или... а давайте напишем небольшой скрипт, который нам послужит и уроком и примером одновременно?
Вначале немного о том, что мы будем делать + немного теории. Итак, предположим у нас имеется некий сайт, на котором посетители могут регистрироваться и указывать свои контактные данные (телефон, e-mail, ICQ). И мы хотим защитить наших посетителей от спамеров. Ведь как спамеры собирают свои базы? Спамер запускает специальный скрипт (парсер), который ищет на сайте все комбинации символов, среди которых имеется знак @. Задача парсера - найти все, что попадает под формулу ***@***.*** (вместо звездочек любые символы) - это и будет адрес электронной почты. Вначале от подобных парсеров защищались, заменой в электронном адресе символа @ на что-то другое, например (a) или (at) - возможно вы встречали подобные "замаскированные" email-ы. Но разработчики парсеров не сидят на месте - ведь "обьяснить" скрипту что цель парсинга вместо @ может содержать (a) или (at) не очень сложно даже для начинающего программиста.
Но если вместо комбинации символов ***@***.*** будет изображение, то парсер не примет его за адрес электронной почты. Посмотрите живой пример в действии - попробуйте ввести google.com.ua и посмотрите его данные. Обратите внимание на значения e-mail. Это картинка, которую легко прочитает человек но которую пропустит программа-парсер. Давайте сделаем нечто подобное себе.
С теорией разобрались, с задачей определились - теперь самое время приступить к практике. Для начала нам придется убедиться что на сервере установлена библиотека GD - именно она нам понадобится для "рисования". Впишите в какой-либо файл
- <?php
- ?>
Перед вами появится информация о PHP - версия, установленные расширения и т.д. Если вы увидиту GD Support enabled значит все в порядке. Давайте создадим файл str2img.php, в который запишем следующий код (чтобы было понятнее, каждая строка содержит комментарий):
- $mystr = $_GET["mystr"];//переменная $mystr будет содержать значение, которое мы передадим в данный файл
- for ($i = 0; $i < strlen($mystr); $i++) { //запустим цикл, который выполнится столько раз сколько символов в нашем слове
- $x = 8+$i * 8; // каждый новый символ нарисуем на 8 пикселов правее
- $y = 0; // поскольку пишем в одну строку, горизонтальные координаты = 0
- }
Данный файл нарисует нам все, что мы ему передадим методом GET, вот пример:
- <img src="str2img.php?mystr=hosting from webamator.net" />
Вместо фразы hosting from webamator.net можете передавать нужное значение - к примеру, как и было сказано вначале, адреса электронной почты, которые будут "спрятаны" от парсеров. Можете посмотреть действующий пример данного скрипта.





