PDA

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


Artem-Samsung
06-10-2008, 22:03
Подскажите пожалуйста, каким образом создаются Юзербары для форумов,
когда можно увидеть свой айпи или или ведение какого то отчета времени, или рейтинг на битторенте.
т.е. получаются динамические картинки.

Поделитесь пожалуйста секретом.

GrayZOR
07-10-2008, 01:35
юзербар со своим ip можете получить на сайте 2ip.ru
Большой архив юзербаров можете найти на http://userbars.ru/ так же там имееются статьи по созданию и т.п.

Готовь фотошоп, paint.net и какойнибудь gif-aниматор...

Coutty
07-10-2008, 03:57
Если говорить про "каким-образом" они создаются - видимо, библиотекой GD2 для PHP.

Artem-Samsung
09-10-2008, 20:35
Coutty, спасибо, GD2 похоже то что надо )

GrayZOR, Спасибо, но на том сайте похожих уроков нету, да и на вопрос на форуме вразумительных ответов не получил

Artem-Samsung
12-10-2008, 03:30
Dynamic Userbar Text! (http://forum.userbars.com/userbar-designer-f45/dynamic-userbar-text-t28575.html/)
Может кому будет полезно, да и себе на заметку.
Часто просмотриваю свои же темы в поиске информации ))

Artem-Samsung
13-10-2008, 00:36
Получилось у меня вообщем сделать юзербар таким вот образом:

<?php

header("Content-type: image/jpeg");
$im = @ImageCreateFromJPEG ("userbar.jpg") ;
$white = imagecolorallocate($im, 255, 255, 255);

$text = "Blog topics: 36 Since 07.07.2008";

imagettftext($im, 10, 0, 45, 13, $white, "Visitor TT2 -BRK-.ttf", $text);
imagejpeg($im, NULL, 100);
imagedestroy($im);
?>

Очень увлекательно. Первое мое программирование графики со времен еще 10-го класа в Paskal ))
Результат: http://deykun.com/test.php

Используемые материалы:
http://softtime.ru/dic/id_dic=363&id_group=15
http://php.net/imagejpeg

Вот только вопрос один и самый главный решился нерешенным.
Как собсвенно замутить это все чудо на форум, на сайт и так далее.
Адресс картинки то с окончанием .php как то совсем не радует.
И получится ли сохранить динамичность кода.

Думаю да, так как такие юзербар встречаются на всех форумах, но вот как ? :))
Буду благодарен, если кто чего доброго посоветует.

Пробовал заменять imagejpeg($im, NULL, 100); на imagejpeg($im, 'upload/img.jpeg', 100); Картинка вооще перестала открываться.

Coutty
13-10-2008, 08:56
Пробовал заменять imagejpeg($im, NULL, 100); на imagejpeg($im, 'upload/img.jpeg', 100); Картинка вооще перестала открываться. »
Так правильно - она же сохраняется в другом файле, который не запрашивается браузером. Можно, например, в .htaccess'е написать, чтобы файлы .jpeg рассматривались сервером как php-скрипты. Тогда .jpg будут обычные картинки, а .jpeg - скрипты. Вот и не php-расширение :)
Или же в самом html написать JS на событие body onload. Что-то вроде:
<body onload='document.getElementById("imgCounter").src = "upload/img.jpeg"'>
Не знаю, сработает ли это. Возможно приведёт к двойной загрузке. Если так, то лучше сделать невидимый динамический счётчик и статический видимый:

<img src='scriptCounter.php' width='1px' height='1px' />
<img src='upload/img.jpeg' width='88px' height='30px' />


Но в этом случае, наверное, будет выдаваться изображение от предыдущего запроса.

А как насчёт того, чтобы изображение генерировалось в момент создания страницы и выдавалось потом как статичное?

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

<img src='upload/img.jpeg?0.12345678' />

Хотя что плохого в изображении, оканчивающемся на .php?)

Artem-Samsung
13-10-2008, 14:39
Спасибо, как то попробую разобраться во всем методах.
Но я вот вроде как то сделал своим методом, а именно:

RewriteEngine On
RewriteRule test.jpg test.php [L]

:)))

Получилось:
http://deykun.com/test.jpg

А что плохого в изображениях на php я тоже не пойму)))) но не любят почему то его форумы в подписях)

А по поводу кешировки? То как так сделать? Если я на форумах буду размещать картинку, то полюбому она будет статический адрес иметь О.о

Хм.. таки да. Кешируется плохо. Я только что поменял цифру на баннере, то только в другом браузере увидел разницу, или если открыть картинку отдельно страницы ((( С кешировкой можете поподробней?

Или это удел всех динамических юзербаров?

Coutty
13-10-2008, 18:59
Как сделать, чтобы на форумах не кэшировалось - даже и не знаю.

Artem-Samsung
13-10-2008, 20:35
Coutty, подем думать :) А пока тему можно считать решенной. Спасибо, Coutty

Arrest
13-10-2008, 20:51
<?php

$good_str = "D, d M Y H:i:s T";
header("Content-type: image/jpeg");
header("Cache-Control: max-age=43200, must-revalidate");
header("Expires: ".date($good_str, time()+43200);
header("Last-Modified: ".date($good_str, filemtime("cache"));

if(file_exists("cache") && (time() - filemtime("cache") > 3600*12)){ // 12 часов
fpassthru(cache);
die();
}

// тут всякая генерация картинки и прочая мура
// [...]
// [...]
// [...]

ob_start();
imagejpeg($im, NULL, 100); // image_jpeg оборачиваем в ob_start/ob_end
$image = ob_get_contents();
ob_end_flush();

error_reporting(0); // вот тут нам главное не зас@ать сгенеренную картинку ошибками типа "Permission denied"
$fh = fopen("cache", "w");
fwrite($fh, $image);
fclose($fh);
?>

Итого:
1. Браузер запрашивает картинку раз в 12 часов.
2. Сервер генерирует картинку раз в 12 часов.
3. Эти события не синхронизированы :)

P.S. Код как обычно грязный, за его работу я поручиться не могу.

Coutty
13-10-2008, 21:19
Arrest, разве для изображений можно указывать "Expires"? Это для меня новость)

Artem-Samsung
14-10-2008, 01:06
Тестим :)
Значит поправил скобочек в 5-й и 6-й строчке, скрипт запахал, только картинки нету. Как бы не отображается.
Закоментировав те же 5-е и 6-е строчки все заработало, но на глаз так не скажешь, кешируется или нет :) ну сейчас нет, а может в кеше оно удалиться через 12 часов? :)
Но факт в том, что что то не то со строчками:

header("Expires:".date($good_str, time()+43200));
header("Last-Modified: ".date($good_str, filemtime("cache")));


Вот полностью скрипт:


<?php
$good_str = "D, d M Y H:i:s T";
header("Content-type: image/jpeg");
header("Cache-Control: max-age=43200, must-revalidate");
header("Expires:".date($good_str, time()+43200));
header("Last-Modified: ".date($good_str, filemtime("cache")));

if(file_exists("cache") && (time() - filemtime("cache") > 3600*12)){ // 12 часов
fpassthru(cache);
die();
}

$im = @ImageCreateFromJPEG ("userbar.jpg");
$white = imagecolorallocate($im, 255, 255, 255);
$text = "Blog topics: 38 Since 07.07.2008";

imagettftext($im, 10, 0, 45, 13, $white, "Visitor TT2 -BRK-.ttf", $text);

ob_start();
imagejpeg($im, NULL, 100);
$image = ob_get_contents();
ob_end_flush();

error_reporting(0);$fh = fopen("cache", "w");
fwrite($fh, $image);
fclose($fh);
?>


А можно сделать что бы из кеша удалялось не по истечению 12-ти часов, а сразу?
10 кб как бы не сильно и в напряг будет.
если заменить здесь:
if(file_exists("cache") && (time() - filemtime("cache") > 3600*12)){
fpassthru(cache);
die();
}
на
if(file_exists("cache") && (time() - filemtime("cache") > 3600*0)){
fpassthru(cache);
die();
}

хм... а вот в Фаерфоксе все работает, как запланировано. В Опере нет (

Значит так:
IE 7 - картинка обновляется
Firefox 3 - картинка обновляется
Opera 9 - картинка в кеше застряет

Но такая же ситуация с моим самым простым программны кодом

Arrest
15-10-2008, 05:13
Coutty
ммм... нельзя, да? :) по идее браузер должен кэшировать все, что прикажут

Artem-Samsung
Если откручивать кэширование на сервере - то делать так:


<?php
$good_str = "D, d M Y H:i:s T";
header("Content-type: image/jpeg");
header("Cache-Control: max-age=43200, must-revalidate");
header("Expires:".date($good_str, time()+43200));
header("Last-Modified: ".date($good_str, filemtime("cache")));


$im = @ImageCreateFromJPEG ("userbar.jpg");
$white = imagecolorallocate($im, 255, 255, 255);
$text = "Blog topics: 38 Since 07.07.2008";

imagettftext($im, 10, 0, 45, 13, $white, "Visitor TT2 -BRK-.ttf", $text);

imagejpeg($im, NULL, 100);
?>

тогда и волки сыты, и овцы целы и пастуху вечная память ;)




© OSzone.net 2001-2012