Blog. Just Blog

Антиникотиновый информер

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Антиникотиновый информер
Антиникотиновый информер

Когда я бросил курить, то в качестве стимула сделал себе такой антиникотиновый информер и использую его в подписи на некоторых форумах. Это PHP-скрипт, который считает в реальном времени сколько всего сэкономлено и выводит результат в виде графического файла.
  1. <?
  2. //-------------------------------------------------------------
  3. // Скрипт антиникотинового информера с интервалами дат
  4. // Copyright (C) ManHunter / PCL
  5. // http://www.manhunter.ru
  6. //-------------------------------------------------------------
  7.  
  8. // Настройки информера
  9. $cig_per_day=20;      // Сигарет в сутки, шт.
  10. $rub_per_day=65;      // Денег на сигареты в сутки, руб.
  11. $nikotin=1.2;         // Количество никотина в 1 сигарете, мг.
  12.  
  13. $d=28;                // Месяц, когда бросил курить
  14. $y=2008;              // Год, когда бросил курить
  15. $m=7;                 // День, когда бросил курить
  16.  
  17. $h=11;                // Время, когда бросил курить, часы
  18. $i=30;                // Время, когда бросил курить, минуты
  19.  
  20. $size=10;             // Размер шрифта информера
  21. $font="my_font.ttf";  // Файл с TTF-шрифтом
  22. $border=10;           // Отступ текста от границ
  23. //-------------------------------------------------------------
  24.  
  25. // Дальше лучше ничего без надобности не менять
  26.  
  27. function num2word($num,$words) {
  28.   $num=$num%100;
  29.   if ($num>19) { $num=$num%10; }
  30.   switch ($num) {
  31.     case 1:  { return($words[0]); }
  32.     case 2:
  33.     case 3:
  34.     case 4:  { return($words[1]); }
  35.     default: { return($words[2]); }
  36.   }
  37. }
  38.  
  39. $start_date=mktime($h,$i,0,$m,$d,$y);
  40. $end_date=time();
  41.  
  42. $day=intval(($end_date-$start_date)/(24*60*60));
  43. $hour=intval(($end_date-$start_date-$day*24*60*60)/(60*60));
  44.  
  45. $days_array=Array("день""дня""дней");
  46. $hour_array=Array("час""часа""часов");
  47.  
  48. // Сгенерировать текст информера
  49. $str="Не курю: ".$day." ".num2word($day,$days_array)." ".
  50.      ($hour==0?"ровно":$hour." ".num2word($hour,$hour_array))."\n".
  51.      "Не выкурено сигарет: ".
  52.      intval(($day+($hour/24))*$cig_per_day)." шт.\n".
  53.      "Не потрачено денег: ".
  54.      intval(($day+($hour/24))*$rub_per_day)." руб.\n".
  55.      "Не убито лошадок: ".
  56.      intval(($day+($hour/24))*$cig_per_day*$nikotin/50)." шт.";
  57.  
  58. // Перевести в юникод, чтобы корректно отображались русские буквы
  59. $str=iconv('windows-1251','utf-8',$str);
  60.  
  61. // Получить размер графического блока для вывода текста
  62. list($ldx,$ldy,$rdx,$rdy,$rux,$ruy,$lux,$luy)=imageTTFBBox($size,0,$font,$str);
  63.  
  64. // Получить размер информера
  65. $xx=$rdx+$border*2+$size;
  66. $yy=$rdy+$border*2+$size;
  67.  
  68. // Создать изображение
  69. $im=imageCreatetruecolor($xx,$yy);
  70.  
  71. // Определить цвета
  72. $black=imageColorAllocate($im,0,0,0);
  73. $red=imageColorAllocate($im,255,0,0);
  74. $white=imageColorAllocate($im,255,255,255);
  75.  
  76. // Белый прямоугольник с красной рамкой
  77. ImageFilledRectangle($im,0,0,$xx,$yy,$red);
  78. ImageFilledRectangle($im,1,1,($xx-2),($yy-2),$white);
  79.  
  80. // Наложить текст на фон
  81. imagettftext($im,$size,0,$border+5,$border+$size,$black,$font,$str);
  82.  
  83. // Вывести картинку в формате PNG
  84. Header("Content-type: image/png");
  85. imagePNG($im);
  86. ?>
В этом примере в скрипт занесены данные: одна пачка сигарет в день, средняя цена пачки - 65 рублей (я курил "Captain Black") и содержание никотина 1,2 мг в 1 сигарете. Расчет лошадок выполняется на основании фразы "капля никотина убивает лошадь" и данных, что 1 капля никотина весит примерно 50 мг. Файл с кириллическим TrueType-шрифтом my_font.ttf должен находиться в той же папке, где размещен скрипт. PHP должен быть собран с поддержкой графической библиотеки GD2.

Для красоты и удобства вы можете настроить сервер так, чтобы к скрипту можно было обращаться как к обычной картинке. Для этого создайте файл .htaccess следующего содержания и положите его в папку со скриптом. Модуль Apache mod_rewrite должен быть включен.
  1. RewriteEngine on
  2. RewriteRule ^nosmoke.pngnosmoke.php
Здесь подразумевается, что файл скрипта имеет название nosmoke.php, а картинка - nosmoke.png. Теперь информер можно вызывать как обычную картинку, размещать ссылку на нее на форумах и сайтах, где запрещены ссылки на скрипты в качестве изображений. Скрипт можно дорабатывать как угодно, например, сделать кэширование картинки, чтобы не создавать дополнительную нагрузку на сервер. Здесь главное понять сам принцип и технику работы с простейшей графикой на PHP.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 6155 | Комментариев: 10

Метки: PHP, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (01.03.2013 в 11:42):
Могу. Баксов за 300
Николай (01.03.2013 в 09:42):
Здравствуйте, понравилась сама идея, у меня есть сайт на Джумле - Только Хорошие Новости, неплохо было бы разместить на нем подобный счетчик, только чтобы пользователи сами могли каждый для себя его включать, если вы можете такое сделать - стукните в асю 473737041 или в скайп portall.com.ua
sv (28.08.2012 в 09:46):
спасибо за код, отличная мотивация...а я сделал вот так http://infosv.org/not_smoke
photoprikol.net (15.03.2012 в 16:31):
Спасибо за код, очень пригодился :)
Игорь (28.04.2010 в 13:24):
Вот и мне бы пригодился...
Прихватил - пользы для. Благодарствую.
Алексей (18.02.2010 в 16:06):
Странно, что таких информеров вообще нет в инете. Только один.
Этот намного интереснее. Только не пойму, т.к. не спец, что с этимскриптом дальше делать-то? Куда его пихать, чтобы было отображение на форуме?)
fagot (08.05.2009 в 12:36):
и я :-)уже 620дней
скрипт конечно не делал, а взял готовый тут
http://www.dkg.pp.ru/nosmoke/AfterCall.png
StasShmelev (02.05.2009 в 14:38):
Браво!!! Отличный скрипт, а применение всегда найдется! Спасибо! А секунды,- не думай о секундах свысока...:)
gosha (01.05.2009 в 14:56):
Прикольно! Даже знаю, кому подарю!
dubb (30.04.2009 в 07:18):
а где минуты и секунды ?

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2018
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.005 сек.) / Память: 4.75 Mb
Наверх