Войти

Показать полную графическую версию : [решено] Создание динамического юзербара на php


Artem-Samsung
17-10-2008, 14:48
Мой самый первый урок
Оставляйте, пожалуйста, не только отзывы, но и критику.
Урок так же оформлен в моем блоге:
При копировании урока, прошу упомянуть мой источник:
http://deykun.com/?articles=7

http://deykun.com/upload/de_articles_956a8_ico.jpg

Урок. Создание Динамического юзербара на php

Динамические свойства юзербара, создание которого сейчас будет рассматриваться, заключается не в анимации, а в изменении его внешнего вида в зависимости от программного кода. Таким образом, юзербар приобретает кроме внешней красоты, над которой вы пошаманите в Photoshop, свой собственный интеллект (конечно относительно).
Это может быть как обычный отсчет времени от или до какого-то события, определение ip, операционной системы или браузера пользователя, прогноз погоды, да и все, что угодно! Ограничениями будут являться только ваша фантазия и знания программирования.
Вашему вниманию предлагается самого простого динамического юзербара, в которой может разобраться любой человек. Даже умение программировать на php не потребуется. Я специально приведу кроме основной схемы еще и простейшие шаблоны программного кода, вы можете совсем просто настроить его под себя.
Урок разрабатывался специально для userbars.ru, где значительная часть посетителей - дизайнеры, поэтому на всех технических моментах буду останавливаться очень подробно, и пусть меня простят программисты, для которых всё это может показаться скучным и примитивным.

У вас нет навыков работы в php и от веб-технологий вы далеки?
Тогда этот урок рассчитан и на вас. У вас всё получится, если будете строго следовать уроку, а мои подробные объяснения нацелены на то, чтобы вы осознавали свои действия и, в случае чего, могли переделать всё под себя. Что ж, приступим.

Ход работы

1. Подготовка.
2. Создание юзербара в графическом редакторе.
3. Подготовка инструментария.
4. Создаем скрипт-файл.
4.1. Комментарии относительно шрифтов.
5. Сохранение и размещение.
6. Первый результат.
7. .htaccess.
8. Конечный результат.

1. Подготовка

Нам понадобятся:

* Хостинг - www.ho.ua
* FTP client - Total Commander
* Editor - Notepad++

Теперь остановимся на каждом подробнее.

Веб-сервер

Для начала, нам потребуется хостинг. Т.е. дисковое пространство с поддержкой php.
Файлообменники или бесплатные галереи в данном случае не подойдут, т.к. на них мы можем закачать только статическое изображение. Наша же картинка будет каждый раз меняться, т.е. создаваться заново индивидуально для каждого пользователя серверным приложением.
Что делать, если своего веб-сервера у вас нет, а оплачивать хостинг совсем не хочется? Есть множество бесплатных хостингов, но я остановился на выборе www.ho.ua

Заполняем форму:
http://deykun.com/images/articles/userbarphp/1.jpg

На e-mail приходит активация.
Активируем и получаем логин с паролем.
http://deykun.com/images/articles/userbarphp/2.jpg

FTP-client (FTP клиент)

Для того, что бы управлять файлами на хостинге, воспользуемся Total Commander’ом: http://www.ghisler.com
Заходим в утилиту управления FTP-соединением. Ctrl+F.
Жмем кнопку «Добавить». И заполняем все поля значениями, которые выслали нам на е-мейл

http://deykun.com/images/articles/userbarphp/3.jpg

Добавилось новое FTP соединение. Выбираем его из списка, жмем кнопку «Соединиться» и получаем доступ к файлам.

Editor (Текстовый редактор кода)
Мы будем работать с программным кодом и вручную, поэтому воспользуемся программой Notepad++( http://notepad-plus.sourceforge.net/ru/site.htm) которая красиво подсвечивает код php.
Скачиваем, устанавливаем и запускаем программу. В меню Синтаксис активируем поле - PHP.

2. Создание юзербара в графическом редакторе

Создаем растровое изображение размером 350 x 19. Всё зависит от ваших мастерских умений в Photoshop. По созданию юзербаров любой сложности можно найти очень много уроков, в этом уроке не буду подробно останавливаться на данном вопросе.
Единственное, что вам нужно рассчитать, это место для графического элемента, желательно с каким-то однотонным фоном. Таким элементом в моем уроке будет выступать обычный текст.

У меня получилось:
http://deykun.com/images/articles/userbarphp/5.jpg

Я оставил место между машиной и логотипом “007” специально для текста, который будет оповещать о долгожданной премьере фильма.

3. Подготовка инструментария
Речь идет об инструментарии нашей серверной оболочке.
Рассмотрим все элементы, с которыми нам предстоит работать.

Файл шрифта
Скачиваем шрифт Visitor
http://www.dafont.com/visitor.font

Файл со скриптом
Это файл, который будет содержать программный код для генерации графического изображения. Находиться он должен, только на сервере.
В моем конкретном случае, место этом файлу в директории htdocs.

.htaccess -файл дополнительной конфигурации веб-сервера Apache. На хостинге который я выбрал, такой файл уже существует в директории htdocs . Если ваша цель – хранить на том хостинге только юзербары, то можете созданный файл почистить.
Копируем себе с FTP на жесткий диск файл .htaccess и открываем его блокнотом, или же другим специализированным редактором. У меня для таких целей служит – Notepad++. Если вы хотите заняться динамическими юзербарами всерьез и надолго, то не поленитесь, скачайте и установите.

Уже составленный список программного обеспечения:
Photoshop, Total Commander, Notepad ++.

4. Создаем скрипт
Открываем блокнот: Файл - Создать. Копируем код:


<?php
header("Content-type: image/jpeg");
$im = @ImageCreateFromJPEG ("userbar.jpg") ;
$color = imagecolorallocate($im, 255, 255, 255);
$element = " Since 31.10.2008";
imagettftext($im, 10, 0, 45, 13, $color, "Visitor TT2 -BRK-.ttf", $element);
imagejpeg($im, NULL, 100);
imagedestroy($im);
?>


Как видим со скриншота, я вас не обманываю, все действительно просто:
http://deykun.com/images/articles/userbarphp/6.jpg

Сделаем небольшие пояснения по программному коду того, что вам нужно изменить для того, чтобы создать юзербар под свои потребности.

$im = @ImageCreateFromJPEG ("userbar.jpg") ;
Это переменная с адресом изображения, на который будем накладывать свой эффект. У меня это userbar.jpg, который находится в одной папке со скриптом. Если у вас скрипт в корневой директории, а картинка в папке images, то путь будет таким:

$im = @ImageCreateFromJPEG ("images/userbar.jpg") ;

$color = imagecolorallocate($im, 255, 255, 255);
Переменная с цветом. Если вы немного разбираетесь в RGB, то понимаете, что это белый.
Подробней об RGB. (http://ru.wikipedia.org/wiki/RGB)
Сгенерировать код нужного цвета. (http://www.colorschemer.com/online.html)

К примеру, вам нужен черный цвет. Тогда наша строчка будет иметь такой вид:
$color = imagecolorallocate($im, 0, 0, 0);
Зеленый: $color = imagecolorallocate($im, 0, 255, 0);
Синий: $color = imagecolorallocate($im, 0, 0, 255);
Красный: $color = imagecolorallocate($im, 255, 0, 0);

$element = " Since 31.10.2008";
Это строковая переменная (в рамках урока рассматриваем только строковые), в которой должно содержаться то, что мы собираемся выводить на экран.

imagettftext($im, 10, 0, 45, 13, $color, "Visitor TT2 -BRK-.ttf", $element);
Накладываем текст, который содержится в переменной $element.
Где 10 – размер шрифта, 0 – угол поворота картинки, 45 – смещение от левого края, 13 – смещение от верхнего края картинки, Visitor TT2 -BRK-.ttf – шрифт.

imagejpeg($im, NULL, 100);
Вывод картинки на монитор. 100 – максимальное качество изображения. Так как мы создаем небольшой юзербар, то мелочиться с качеством не стоит.

4.1. Шрифт

Программный код php обрабатывается на сервере специальным модулем php в Apache2, и на выходе мы получаем готовый продукт. В основном генерируется html-код, но в нашем случае - картинка.
Поэтому не нужно беспокоится о том, что у пользователя нет такого шрифта, вся процедура выполняется сервером, но как раз о наличии этого шрифта на сервере нам и нужно позаботиться.
Закачать шрифт нужно в нашем случае нужно в папку htdocs и указать к нему путь.
Путь указывается в программном коде в этой строке:
imagettftext($im, 10, 0, 160, 13, $color, "Visitor TT2 -BRK-.ttf", $ element);
В двойных скобках указываем точное местоположение шрифта. Если шрифт вы закачали в ту же папку, где и главный скрипт, то достаточно в точности скопировать имя файла шрифта. Если у вас много шрифтов, и для них вы выделили отдельную папку fonts, то адрес будет такой: "fonts/Visitor TT2 -BRK-.ttf"

Таким образом, настройка шрифта сводится к процедуре в два действия:
1. Закачиваем шрифт через Total Commander на сервер
2. Указываем точный путь файла

Как видим, указывается не просто название шрифта, а полный путь до него. Поэтому, даже для того чтобы использовать шрифт Arial, его нужно закачать на сервер

5. Сохранение и размещение
Если вы строго следовали уроку, то не занимались, ни сохранением, ни размещением php-скрипта, сейчас этим и займемся.

Сохраняем
В Блокноте: Файл – Сохранить как – Имя файла: userbarscript.php
У нас получился файл с расширением *.php
Если будете просматривать файл в Total Commander, обратите внимание, чтобы файл именовался чётко - userbarscript.php, а не userbarscript.php.txt к примру, в случае чего – переименуйте.

Размещаем
Просто скопируйте через Total Commander файл userbarscript.php в директорию вашего хостинга. Если необходимо будет сделать в скрипте изменение, копируйте обратно, изменяйте и заново заливайте – т.к. не всегда получится отредактировать файл непосредственно на сервере.

6. Первый результат
Если вы все сделали правильно, то уже сможете посмотреть свое творение по адресу вашего скрипта, в моем случае: http://artemhp.ho.ua/userbarscript.php

Мой результат:
http://deykun.com/images/articles/userbarphp/userbarscript.jpg
Всё есть, и картинка, и текст. А вот расположение этого самого текста придётся поправить.

Изменяем
imagettftext($im, 10, 0, 45, 13, $color, "Visitor TT2 -BRK-.ttf", $element);
на
imagettftext($im, 10, 0, 160, 13, $color, "Visitor TT2 -BRK-.ttf", $ element);
И всё ровненько:
http://deykun.com/images/articles/userbarphp/userbarscript2.jpg

Это наш первый результат. Но не конечный, так как картинка имеет расширение “php”, а большинство движков форумов не поддерживают формат такой формат картинки . В тэгах мы её не увидим картинки.
Для того, чтобы обмануть браузеры, мы воспользуемся ещё одним файлом из нашего инструментария: .htaccess

7. .htaccess
Открываем .htaccess (желательно в Notepad++). Дописываем такие строки:

RewriteEngine On
RewriteRule userbar1.jpg userbarscript.php

Записью RewriteEngine On активируем модуль mod_rewrite
И делаем подмену. Как обычный ярлык во всех операционных системах userbar1.jpg – есть ярлыком на userbarscript.php.
Теперь все форумы и движки, видят нормально нашу картинку по адресу – http://artemhp.ho.ua/userbarscript.php

8. Конечный результат
В результате у нас получилось методами программирования создать кусочек графики, а здесь уж понятно, что можно творить всё что угодно. Были бы знания или друзья, которые помогут.
В созданном на этом уроке юзербаре динамику уловить сложно, текст статичен, поэтому в завершение, что бы совесть не мучила, приведу пример интересной возможности - определение ip-адреса.

Вместо:
$element = " Since 31.10.2008";
пишем
$element = "007 Agent IP: ".$_SERVER["REMOTE_ADDR"];
Получаем:
http://deykun.com/images/articles/userbarphp/7.jpg

Если у вас получилось сделать юзербар по моему уроку с использованием программного кода php, сообщите. Вопросы, в случае их возникновения, будут обязательно рассмотрены в будущих редакциях статьи.
Можете поэкспериментировать с более сложными алгоритмами,

К примеру:

Вместо записи:
$element = " Since 31.10.2008";
Вставляем нужный код алгоритма.

Отсчет времени с определенной даты
Дату - 2008-10-10. заменям на свою

$last = "2008-10-10";
$now = time();
$res = $now - strtotime($last);
$days = 0;
while ( $res >= 86400 ) {
$days++;
$res -= 86400;
}
$element = "Прошло - ".$days." дней";


Сколько дней осталось до определенной даты
2009-03-13 - заменям на свое.


$f = "2009-03-13";
$now = time();
$res = strtotime($f)-$now;
$days = 0;
while ( $res >= 86400 ) {
$days++;
$res -= 86400;
}
$element = " Осталось - ".$days." дней";


Замечания. Недостатки.
По ходу тестирования данного метода были замечены следующие недостатки:

Кэширование
Даже если на сервере картинка поменялась, то в браузере Opera вы этого не заметите, пока картинка находится в КЭШе (т.е. картинка запоминается браузером и не выкачивается второй раз с сервера для экономии трафика). Стандартно в Opera под КЭШ выделяется 24 мб, это значит, что при нормальном серфинге уже через день картинка должна обновиться.
Данный недостаток вышеописаного метода замечен только в Opera. Остальные браузеры картинку обновляют с сервера нормально.
Буду весьма признателен, если вы подскажете, как решить данную проблему.

На заметку администраторам
Если у вас свой собственный сервер, то вам нужно проверить наличие:
- Установленного и настроенного в Apache2 mod_rewrite. http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
- Наличие графической библиотеки GD2 для php
http://guzei.com/www/php/gd.php

Выбор хостинга
У вас все получилось. Полигон для испытаний ho.ua уже в прошлом. Вам рано или позно понадобится изменить хостинг или создали свой собственный сервер. Есть быстрый способ проверить, настроен ли он под наши потребности (создание динамических юзербаров).
(от Arrest)

Залейте в корень сайта файлы .htaccess и imgen.php со следующим содержанием:

RewriteEngine on
RewriteRule ipr.gif imgen.php

imgen.php

<?php
error_reporting(7);
$i = imagecreate(200, 100);
$c = imagecolorallocate($i, 0, 0, 0);
imagestring($i, 3, 0, 0, "Works!", $c);
imagegif($i);
?>

Всем спасибо.
Выношу огромную благодарность форуму forum.oszone.ru, forum.woweb.ru и ubforum.ru

Автор: Артем Дейкун
Редактор: Coutty, Igor_I
Координаты: http://deykun.com, artem@meta.ua

Igor_I
17-10-2008, 21:08
Молодец, еще бы русский подтянуть. :)
Пара моментов, @ ставится для подавления вывода ошибок. На время отладки скрипта можно удалить.
Шрифты, не факт что они уже будут, лучше залить самим.
И заодно, найти онлайн-сервис который показывает цвет соответствующий значениям RGB.

Coutty
17-10-2008, 21:32
Да, с русским проблем довольно много. Нет смысла даже перечислять.
По поводу содержимого:
mod_rewrite не является стандартным расширением, поэтому его, возможно, придётся прикручивать к серверу самостоятельно (на локальной машине).
gd2 также не является стандартной библиотекой для php.
Также в той теме обсуждались вопросы кэширования. Возможно, стоит упомянуть ;)
По поводу написания кода - стоит отдельно сказать, что перед открывающим тэгом <?php не должно быть никаких символов, иначе header'ы не отправятся.
И заодно, найти онлайн-сервис который показывает цвет соответствующий значениям RGB. »
А лучше показать, как это делается в том же фотошопе ;) Впрочем, урок рассчитан на дизайнеров, которые в программировании мало понимают, но разбираются в графике, т.ч. не обязательный пункт.

Artem-Samsung, в целом здорово :up Интернет нуждается в качественных и доступных для понимания уроках в любых областях. Хотя... Может у меня просто взгляд затуманен? Было бы интересно услышать отзывы от тех, кто с веб-программированием не сталкивался.

Igor_I
17-10-2008, 21:55
mod_rewrite не является стандартным расширением, поэтому его, возможно, придётся прикручивать к серверу самостоятельно (на локальной машине).
gd2 также не является стандартной библиотекой для php. »
Кстати это верно.
Поэтому надо бы исправить.
Нам необходимо:

* Веб-сервер - www.ho.com.ua
* FTP client - Total Commander
* Editor - Notepad++
Включив для веб-сервера необходимые модули.

Artem-Samsung
18-10-2008, 16:10
Шрифты, не факт что они уже будут, лучше залить самим »
Дописал о шрифтах, спасибо

Да, с русским проблем довольно много. Нет смысла даже перечислять »
В школе почти не изучалось :). Но сам понимаю, что это не отговорка, немного поправил.
В орфографии ошибок не должно быть, но может в каких то оборотах и будет. Нужно бы договорится с кем то, что бы помогал редактировать )

найти онлайн-сервис который показывает цвет соответствующий значениям RGB »
Есть :) Добавил, но может еще какой то получше посоветуете?

Включив для веб-сервера необходимые модули. »
Это рассчитано для продвинутых дизайнеров и любителей оригинальных узербаров, мало вероятность, что будут поднимать свой сервер, но все же дописал в конце "заметки для администратора"

вопросы кэширования »
Пока вроде не получилось решить, по этому добавил пункт с замечаниями

Coutty
18-10-2008, 17:46
В орфографии ошибок не должно быть, но может в каких то оборотах и будет. Нужно бы договорится с кем то, что бы помогал редактировать ) »
Отредактировал. Выслал в ПМ (выделил исправленные места полужирным). У меня получилось 150 исправлений орфографии, пунктуации и стиля. В следующий раз не возьмусь :)

Arrest
19-10-2008, 11:25
Замечания
Я бы добавил еще "как проверить, готов ли сервер для создания":
Как проверить, готов ли ваш сервер для создания картинок? Залейте в корень сайта файлы .htaccess и imgen.php со следующим содержанием:
.htaccess:
RewriteEngine on
RewriteRule ipr.gif imgen.php
imgen.php:
<?php
error_reporting(7);
$i = imagecreate(200, 100);
$c = imagecolorallocate($i, 0, 0, 0);
imagestring($i, 3, 0, 0, "Works!", $c);
imagegif($i);
?>
Если появится картинка с надписью "Works" по адресу ipf.gif - значит все работает!

И, на закуску, ошибки:
кроме внешней красоты, над которой вы пошаманите в Photoshop, свой собственный интеллект (конечно относительно).
Глава 0, смещение 210
Речь идет об инструментарии нашей серверной оболочки.
Глава 3, смещение 0
В меню Синтаксис активируем поле "PHP".
Глава 1, смещение 1377(самый конец)
Total Commander,<пробел>Notepad ++
Глава 3, смещение 981

Igor_I
19-10-2008, 23:03
В школе почти не изучалось . Но сам понимаю, что это не отговорка, немного поправил. »
Это почти не проблема. http://wiki.services.openoffice.org/wiki/Орфография,_грамматика_и_тезаурус:_Часто_задаваемые_вопросы.
Хотя есть все-таки места, которые не звучат. Именно из-за оборота.
Это рассчитано для продвинутых дизайнеров и любителей оригинальных узербаров, мало вероятность, что будут поднимать свой сервер, но все же дописал в конце "заметки для администратора" »
Вот уж нет, дело в том, что хостинг надо искать именно с этими модулями. Чтобы не было потом вопросов, "я скрипт закачал на сервер, а он не обрабатывается".
- Установленного и настроенного в Apache2 mod_rewrite. http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
Упоминаешь второй Апач, а ссылка ведет на первый. Где логика? :)
В 4 пункте код не совпадает с картинкой. Но это скорее всего - лень. :)
И заодно держи мою исправленную версию.

Artem-Samsung
19-10-2008, 23:48
Спасибо, попробую из того, что снаписал Аррест и Игорь в конце, пункт дополнительный "Самостоятельный выбор хостинга"

Artem-Samsung
27-10-2008, 01:04
Подправил. Дописал по методике Arrest'a "Выбор хостинга" и замечания Igor_I

Кстати, мой первый ученик уже создал юзербар :о))
http://www.zom6ak.ho.ua/userbar1.jpg
Вот в этой темке презентовано: http://ubforum.ru/topic10756-15.html

Темку на форуме даже прикрепили :)

dmitryst
27-10-2008, 13:57
Может, вообще организовать небольшую библиотеку-галерею таких вот "мелочей"? Можно даже голосовалку прикрутить и выложить наиболее нужные программки (например, скрипт фото-галереи)

Igor_I
27-10-2008, 18:58
Скрипт фото-галереи - мелочь???!!! :)

dmitryst
29-10-2008, 21:22
мелочь???!! »
ну, это смотря как написать :). Я, как начинающий, написал несложный скрипт (загрузка картинки/создание миниатюры/выборка миниатюры и картинки). Если кто-то может написать навороченную галерею - милости просим :)




© OSzone.net 2001-2012