Графический таймер обратного отсчета на PHP

minutes-timer Если вы хотите разместить на стороннем ресурсе графический таймер обратного отсчета, который будет актуальным в любое время при посещении страницы, — вам может пригодится мой исходник таймера на 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;
 
?>

Категория: Программирование

Комментари (11)

Trackback URL | Comments RSS Feed

  1. Спасибо! Очень годная инфа

  2. Очень спасибо, надеюсь поможет. Хотя я не силен в пхп

  3. Daffy:

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

Оставить комментарий