Графический таймер обратного отсчета на PHP
Если вы хотите разместить на стороннем ресурсе графический таймер обратного отсчета, который будет актуальным в любое время при посещении страницы, — вам может пригодится мой исходник таймера на PHP.
Так как на форумах в сообщениях добавлять JavaScript запрещено, то такой таймер можно будет вставлять в виде обычной картинки.
Скачать исходники: timer.zip
Пример графического таймера обратного отсчета на PHP:
Новый год наступит через:
Теперь обновите эту страницу и на картинке будут уже другие цифры.
Здесь реализовано два способа получения даты, до которой идет отсчет.
1. Если перейти по этому адресу (в скрипте можно написать любое имя файла), то увидите таймер, который отсчитывает указанные ниже 7 дней:
14 15 16 17 18 19 20 21 22 23 | // установка отсчета на конкретный период времени if ($image == 'seodor-sale') { // http://www.sanchez.com.ua/images/timer/seodor-sale.jpg $start = $image.'.txt'; if (!file_exists($start)) { $fp = fopen ($start,"w"); fwrite($fp, time()); fclose ($fp); } $filemtime = filemtime($start) +60*60*24*7;// 7 дней } |
При первом обращении к картинке-таймеру в папке скрипта создается текстовый файл и в дальнейшем скрипт проверяет время его создания, прибавляя значение $filemtime (7 дней). Таким образом идет обратный отсчет. Чтобы сбросить счетчик — просто удалите файл seodor-sale.txt.
2. Если перейти по этому адресу, то можно заметить, что отсчет идет до указанной даты в названии картинки: date-02-08-2015.jpg. Можно также добавить еще часы и минуты: date-02-08-2015_05-10.jpg. Вместо тире между числами — можно указывать знак подчеркивания _.
Полный код таймера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | <?php date_default_timezone_set('Europe/Moscow'); //header('refresh:1;url='.$_SERVER['HTTP REFERER']); header("Content-type: text/html; charset=utf-8"); // Запрет кэширования header('Expires: Mon, 11 Jul 1991 03:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: no-cache'); error_reporting(0); $image = isset($_GET['image']) ? stripslashes(strip_tags($_GET['image'])) : ''; // установка отсчета на конкретный период времени if ($image == 'seodor-sale') { // http://www.sanchez.com.ua/images/timer/seodor-sale.jpg $start = $image.'.txt'; if (!file_exists($start)) { $fp = fopen ($start,"w"); fwrite($fp, time()); fclose ($fp); } $filemtime = filemtime($start) +60*60*24*7;// 7 дней } else if (preg_match("~^date[\-|_]([0-9]{1,2})[\-|_]([0-9]{1,2})[\-|_]([0-9]{4})(?:_([0-9]{1,2})[\-|_]([0-9]{1,2}))?$~", $image, $m)) { $h = $m[4] ? $m[4] : 0; $mi = $m[5] ? $m[5] : 0; $filemtime = mktime($h,$mi, 0, $m[2], $m[1], $m[3]); } else $image = ''; if (empty($image)) die; function declOfNum($number, $titles) { // функция склонения $cases = array(2, 0, 1, 1, 1, 2); return sprintf($titles[($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ], $number); } if ($filemtime <= time()) { $days = '00'; $hours = '00'; $min = '00'; $sec = '00'; } else { $s = $filemtime - time(); $hour = floor($s/3600); $mins = floor($s/60); $days = floor($s/86400); $hours = floor($s/3600 - $days*24); $min = floor($s/60 - $hour*60); $sec = floor($s - $mins*60); if ($days<10) $days = '0'.$days; if ($hours<10) $hours = '0'.$hours; if ($min<10) $min = '0'.$min; if ($sec<10) $sec = '0'.$sec; } $im = imagecreatefromjpeg('bg.jpg'); $timecolor = imagecolorallocate($im, 255, 255, 255); $textcolor = imagecolorallocate($im, 33, 33, 33); $font = __DIR__ . '/digital.ttf'; $fonttext = __DIR__ . '/verdana.ttf'; imagettftext($im, 40, 0, 78, 64, $timecolor, $font, $days); imagettftext($im, 20, 0, declOfNum($days, array(71, 78, 69)), 98, $textcolor, $fonttext, declOfNum($days, array("день", "дня", "дней"))); imagettftext($im, 40, 0, 168, 64, $timecolor, $font, $hours); imagettftext($im, 18, 0, declOfNum($hours, array(171, 164, 158)), 96, $textcolor, $fonttext, declOfNum($hours, array("час", "часа", "часов"))); imagettftext($im, 40, 0, 257, 64, $timecolor, $font, $min); imagettftext($im, 14, 0, declOfNum($min, array(247, 245, 252)), 94, $textcolor, $fonttext, declOfNum($min, array("минуту", "минуты", "минут"))); imagettftext($im, 40, 0, 346, 64, $timecolor, $font, $sec); imagettftext($im, 12, 0, declOfNum($sec, array(338, 337, 341)), 92, $textcolor, $fonttext, declOfNum($sec, array("секунду", "секунды", "секунд"))); header('Content-type: image/jpg'); imageJpeg($im, null, 85); imagedestroy($im); die; ?> |
Категория: Программирование
Спасибо! Очень годная инфа
Очень спасибо, надеюсь поможет. Хотя я не силен в пхп
Не понял ничего, скрипт поставил, там даже нулей нету, приведите пример с датой нового года, а не семи непонятными днями, куда вписывать дату, обновите даты в этом мануале, уже всё по нулям, кроме нового года.
и добавьте исправления для php 7.0 и сервера nginx настройку)
проверил и на хостинге с php 5 и с апачем, все равно не работает
Данный скрипт работает на php7+nginx. Загружен в папку /images/timer/
Вот конфиг:
rewrite ^/images/timer/([a-z0-9-_]+)\.jpg /images/timer/index.php?image=$1;
Дату можно указать непосредственно в URL:
/images/timer/date-02-12-2017.jpg
у меня на двух не работает разных хостингах, ошибку показывает, что шрифтов не видит, хотя они загружены
Поправил строки 60-61:
Архив обновил.
ураа)) спасибо большое, заработал
Не за что)