Реклама в журнале

Счётчик на PHP

Источник: http://www.nbsp.ru/

Если вашему сайту не нужна расширенная статистка или вы не желаете портить дизайн графическими счётчиками, эта статья - для вас. Счётчик показывает количество уникальных посетителей "сегодня" и "всего". Написан на PHP и успешно работает на моём личном сайте.

Для начала уясним следующее: чтобы считать только уникальных посетителей и при этом обходиться без записи IP адресов, необходимо как-то "помечать" посетителя, что он здесь сегодня (или вообще) уже был. Для этого как нельзя лучше подходит механизм cookie.

Далее. Значения, в нашем случае это три числа, необходимо всё-таки хранить на сервере, иначе просто негде. Вы спросите, почему три числа, а не два. Дополнительное значение является текущим днём месяца, который записывается и впоследствии проверяется для учета посетителей "сегодня".

Рассмотрим код счётчика. Для его работы необходимо вручную создать простой текстовый файл counter.txt в любом редакторе. Выглядит он так:

0
1
0

Первое значение - количество посетителей всего, второе - текущий день месяца и третье - посетителей сегодня.

"Тело" счётчика состоит из двух функций: setvisit() и getvisit(). Перед каждой строкой есть комментарий, поэтому код выглядит довольно большим; зато понятным.

Функция setvisit() устанавливает значения счётчика.

function setvisit() {
// открываем файл counter.txt
$fc = fopen("inc/counter.txt","r+");
// считываем "всего"
$cs = fgets($fc);
// считываем день месяца
$day = fgets($fc);
// определяем сегодняшнюю дату и..
$today = getdate();
// ..получаем день месяца	$mday = $today['mday'];
// считываем значение "сегодня"
$cd = fgets($fc);
// перемещаем указатель файла в начало
rewind($fc);
// увеличиваем значение "всего" и..
$cs+=1;
// ..записываем его
fputs($fc, $cs."\n");
// главное. сравниваем день: тот-же или уже другой?
if($day == $mday) {
// если тот-же - увеличиваем значение "сегодня" и..
$cd += 1;
// ..записываем его
fputs($fc, $day);
} else {
// если день новый
$day = trim($mday);
// записываем день
fputs($fc, $day."\n");
// устанавливаем значение "сегодня" равным единице и..
$cd = 1;
}
// ..записываем его
fputs($fc, $cd."\n");
// закрываем counter.txt
fclose($fc);
}

Функция getvisit() считывает значения счётчика.

function getvisit() {
// открываем файл counter.txt
$fc = fopen("inc/counter.txt","r+");
// получаем "всего"..
$cs = fgets($fc);
// ..день	$day = fgets($fc);
// ..и "сегодня"
$cd = fgets($fc);
// закрываем counter.txt
fclose($fc);
// главное: возвращаем значения "всего" и "сегодня"
return array('global' => $cs, 'today' => $cd);
}

Руководство по эксплуатации счётчика.

Чтобы испльзовать счётчик на разных страницах, поместите функции setvisit() и getvisit() в отдельный файл, например counter.php. Следующий код необходимо поместить на главную страницу вашего сайта. Он устанавливает cookie в браузере посетителя, таким образом исключая его из дальнейшего обсчёта, а также устанавливает значения счётчика методом setvisit().

// функции счётчика в файле counter.php
include "inc/counter.php";
// проверям, установлены ли cookie под названием beenhere?
// название cookie можете выбрать любым
if (!isset($HTTP_COOKIE_VARS["beenhere"]))
{
// если нет - устанавливаем значение cookie равным yes
// главное: при этом указываем (при помощи встроенной 
функции mktime)
// время жизни cookie - 1 (одни) сутки
setcookie("beenhere","yes",mktime(0,0,0,date("m"),
date("d")+1,date("Y")));
// устанавливаем значения счётчика, вызывая setvisit()
setvisit();
}

Последний штрих; необязательный. Показываем значения счётчика. Следующий код разместите в том месте страницы, где необходимо показать значения счётчика.

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

// получаем значения счётчика в переменную $c
<? $c = getvisit(); ?>
// вуаля: сегодня / всего 
Вы посетитель № <? echo $c['today']." / ".$c['global'] ?> 
с такого-то числа. 

Есть вопросы или что-либо не понятно - спрашивайте в форуме "Материалы сайта".

Полезные ссылки:

Сергей Яценко (вебсайт)


UNIX-HOST.RU - отличный хостинг по приемлемой цене
Реклама в журнале

Copyright © <LMTH>. Все материалы являются собственностью их авторов.
При перепечатывании ссылка на http://www.magaz.org/ как на источник
информации обязательна. Правила использования материалов журнала