Картинка-счетчик на PHP
Есть у меня одна абсолютно бесполезная, но забавная фигулька для LiveInternet.ru: счетчик возраста дневника. Некоторые начали спрашивать, как он устроен. Спрашивали - отвечаем. Сегодня я расскажу вам, как сделать подобный счетчик самостоятельно. Приступим?
Хотя перед тем, как начать, уточню: у вас должен быть в распоряжении хостинг и поддержка на нем PHP с включенным модулем GD. Уже страшо? То ли еще будет. Поехали.
Для начала выберем, что будет отсчитывать счетчик. Я за пример взял одно давнее свое ожидание, выход «StarCraft 2». Blizzard обещает выпустить его двадцать седьмого числа, вот до этого дня и будем считать секунды.
Исходя из темы выбираем фоновую картинку:

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

Дальше для верности делается всякое кеширование (чтобы не загружать скрипт генерированием картинки каждое обращение) и тому подобные народные забавы, но это я оставлю вам на самостоятельную проработку.
Хотя перед тем, как начать, уточню: у вас должен быть в распоряжении хостинг и поддержка на нем PHP с включенным модулем GD. Уже страшо? То ли еще будет. Поехали.
Для начала выберем, что будет отсчитывать счетчик. Я за пример взял одно давнее свое ожидание, выход «StarCraft 2». Blizzard обещает выпустить его двадцать седьмого числа, вот до этого дня и будем считать секунды.
Исходя из темы выбираем фоновую картинку:

Неплохо бы еще найти шрифт под стать. Все, приготовления закончились, переходим к написанию скрипта.
<?php
// Получаем текущие дату-время
$currdate=getdate();
// Грузим картинку в память
$image=@ImageCreateFromJPEG("sc2.jpg");
// Получаем текущее время в секундах, начиная от 1 января 1970г.
$currdate=$currdate[0];
// Дата выхода SC2 - 27.07.2010
$dh=0; $dm=0; $ds=0; $dmt=7; $dd=27; $dy=2010;
$datedate=mktime($dh,$dm,$ds,$dmt,$dd,$dy);
// Сколько осталось секунд?
$lost=($datedate-$currdate);
// А может, и не осталось ничего уже?
if ($lost<=0) {
$s_write="NUCLEAR\nLAUNCH\nDETECTED";
} else {
// Осталось дней
$lost_d=($lost-$lost%86400)/86400;
$lost=$lost-$lost_d*86400;
// Осталось часов
$lost_h=($lost-$lost%3600)/3600;
$lost=$lost-$lost_h*3600;
// Осталось минут
$lost_m=($lost-$lost%60)/60;
$lost=$lost-$lost_m*60;
// Осталось секунд
$lost_s=$lost%60;
$s_write="REMAIN: \n\n0".$lost_d." DAYS\n".$lost_h." HOURS\n".
$lost_m." MINUTES\n".$lost_s." SECONDS";
}
// Рисуем на картинке текст, подгружая скаченный шрифт
imagettftext($image, 14, 0, 301, 64, 16777215, "starcraft.ttf", "$s_write");
// Отсылаем заголовок: "Это картинка!"
header ("Content-type: image/jpeg");
// Отсылаем заголовок: "Срок годности - минута!"
header ("Expires: ".date("r",($currdate+60)));
// Выгружаем саму картинку...
ImageJPEG($image,null,100);
ImageDestroy($image);
Exit;
?>
В результате получится что-то вроде этого:

Дальше для верности делается всякое кеширование (чтобы не загружать скрипт генерированием картинки каждое обращение) и тому подобные народные забавы, но это я оставлю вам на самостоятельную проработку.
А еще можно случайную фразу выдавать. Или... Да в общем, была бы фантазия
Если не лень, можно разработки ради поставить сервер с PHP
А за мануал спасибо. Просто и доступно. Затащил к себе в закладки, ибо пригодится, думаю, скоро
Кстати @ в коде зло
Кстати @ в коде зло :)
Пофиг, все равно картинку генерю и ошибки отключены
Не обязательно же только счетчик может быть на картинке, чаще всего какая-нибудь другая информация, которую пропарсили, например, из профиля. Тут определенно нужна задержка )
Комментарии доступны с OpenID (подробнее).