
Антиникотиновый информер
Когда я бросил курить, то в качестве стимула сделал себе такой антиникотиновый информер и использую его в подписи на некоторых форумах. Это PHP-скрипт, который считает в реальном времени сколько всего сэкономлено и выводит результат в виде графического файла.
<?
//-------------------------------------------------------------
// Скрипт антиникотинового информера с интервалами дат
// Copyright (C) ManHunter / PCL
// http://www.manhunter.ru
//-------------------------------------------------------------
// Настройки информера
$cig_per_day=20; // Сигарет в сутки, шт.
$rub_per_day=65; // Денег на сигареты в сутки, руб.
$nikotin=1.2; // Количество никотина в 1 сигарете, мг.
$d=28; // Месяц, когда бросил курить
$y=2008; // Год, когда бросил курить
$m=7; // День, когда бросил курить
$h=11; // Время, когда бросил курить, часы
$i=30; // Время, когда бросил курить, минуты
$size=10; // Размер шрифта информера
$font="my_font.ttf"; // Файл с TTF-шрифтом
$border=10; // Отступ текста от границ
//-------------------------------------------------------------
// Дальше лучше ничего без надобности не менять
function num2word($num,$words) {
$num=$num%100;
if ($num>19) { $num=$num%10; }
switch ($num) {
case 1: { return($words[0]); }
case 2:
case 3:
case 4: { return($words[1]); }
default: { return($words[2]); }
}
}
$start_date=mktime($h,$i,0,$m,$d,$y);
$end_date=time();
$day=intval(($end_date-$start_date)/(24*60*60));
$hour=intval(($end_date-$start_date-$day*24*60*60)/(60*60));
$days_array=Array("день", "дня", "дней");
$hour_array=Array("час", "часа", "часов");
// Сгенерировать текст информера
$str="Не курю: ".$day." ".num2word($day,$days_array)." ".
($hour==0?"ровно":$hour." ".num2word($hour,$hour_array))."\n".
"Не выкурено сигарет: ".
intval(($day+($hour/24))*$cig_per_day)." шт.\n".
"Не потрачено денег: ".
intval(($day+($hour/24))*$rub_per_day)." руб.\n".
"Не убито лошадок: ".
intval(($day+($hour/24))*$cig_per_day*$nikotin/50)." шт.";
// Перевести в юникод, чтобы корректно отображались русские буквы
$str=iconv('windows-1251','utf-8',$str);
// Получить размер графического блока для вывода текста
list($ldx,$ldy,$rdx,$rdy,$rux,$ruy,$lux,$luy)=imageTTFBBox($size,0,$font,$str);
// Получить размер информера
$xx=$rdx+$border*2+$size;
$yy=$rdy+$border*2+$size;
// Создать изображение
$im=imageCreatetruecolor($xx,$yy);
// Определить цвета
$black=imageColorAllocate($im,0,0,0);
$red=imageColorAllocate($im,255,0,0);
$white=imageColorAllocate($im,255,255,255);
// Белый прямоугольник с красной рамкой
ImageFilledRectangle($im,0,0,$xx,$yy,$red);
ImageFilledRectangle($im,1,1,($xx-2),($yy-2),$white);
// Наложить текст на фон
imagettftext($im,$size,0,$border+5,$border+$size,$black,$font,$str);
// Вывести картинку в формате PNG
Header("Content-type: image/png");
imagePNG($im);
?>
В этом примере в скрипт занесены данные: одна пачка сигарет в день, средняя цена пачки - 65 рублей (я курил "Captain Black") и содержание никотина 1,2 мг в 1 сигарете. Расчет лошадок выполняется на основании фразы "капля никотина убивает лошадь" и данных, что 1 капля никотина весит примерно 50 мг. Файл с кириллическим TrueType-шрифтом my_font.ttf должен находиться в той же папке, где размещен скрипт. PHP должен быть собран с поддержкой графической библиотеки GD2.
Для красоты и удобства вы можете настроить сервер так, чтобы к скрипту можно было обращаться как к обычной картинке. Для этого создайте файл .htaccess следующего содержания и положите его в папку со скриптом. Модуль Apache mod_rewrite должен быть включен.
RewriteEngine on
RewriteRule ^nosmoke.png$ nosmoke.php
Здесь подразумевается, что файл скрипта имеет название
nosmoke.php, а картинка -
nosmoke.png. Теперь информер можно вызывать как обычную картинку, размещать ссылку на нее на форумах и сайтах, где запрещены ссылки на скрипты в качестве изображений. Скрипт можно дорабатывать как угодно, например, сделать кэширование картинки, чтобы не создавать дополнительную нагрузку на сервер. Здесь главное понять сам принцип и технику работы с простейшей графикой на PHP.