X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Счетчик посещений для HTML страницы!
ibragivom
ibragivom
Topic Starter сообщение 12.12.2010, 19:25; Ответить: ibragivom
Сообщение #1


Как написать свой счетчик для страницы html? :nea:
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
bob_hb
bob_hb
сообщение 12.12.2010, 20:10; Ответить: bob_hb
Сообщение #2


По моим соображениям это должны быть:
1) время визита
2) IP посетителя
3) станица, с которой пришел посетитель
4) количество просмотренных страниц
5) страницы, которые посмотрел посетитель. Для экономии места лучше всего вносить первый и последний URL, который просмотрел посетитель.

Соответственно создаем таблицу с вышеописанными столбцами:


CREATE TABLE visitors (
vtime datetime not null,
ip text not null,
referer text not null,
hits int not null,
firsturl text not null,
lasturl text not null);

Если задача счетчика - подсчиывать посетителей одного сайта, то можно ограничиться этой таблицей, если же нужно подсчитывать больше одного сайта, стоит завести еще одну таблицу со столбцами:
1) id сайта
2) посетителей всего было на сайте
3) посетители за сегодня
4) хиты за сегодня

Создание скрипта

Создадим файлик, обзовем его counter.pl :

#/usr/bin/perl -w
use DBI; # [COLOR="red"]Загружаем модуль для работы с MySQL[/COLOR]
use GD; # [COLOR="red"]Загружаем модуль для работы с графикой[/COLOR]

$w_database="counter"; # [COLOR="red"]имя MySQL базы[/COLOR]
$w_host="localhost"; # [COLOR="red"]Адерс MySQL сервера. Обычно MySQL сервер установлен вместе с web-server'ом, поэтому пишем localhost.[/COLOR]
$w_user=""; # [COLOR="red"]Логин для входа в MySQL[/COLOR]
$w_password=""; #[COLOR="red"] Пароль для входа в MySQL[/COLOR]

#[COLOR="red"] Соединяемся с MySQL по заранее созданым: базе, пользователю, паролю[/COLOR]
$dbh = DBI->connect("DBI:mysql:$w_database:$w_host",$w_user,$w_password) || die $DBI::errstr;

# [COLOR="red"]Вычисляем сегодняшнюю дату и назначаем переменную, которая содержет дату в формате MySQL[/COLOR].
($Second, $Minute, $Hour, $DayOfMonth, $Month, $Year, $Weekday, $DayOfYear, $IsDST) = localtime(time);
$RealYear = $Year + 1900; $Month++;
if($Month < 10) {$Month = "0" . $Month}
if($DayOfMonth < 10) {$DayOfMonth = "0" . $DayOfMonth}
if($Hour < 10) {$Hour = "0" . $Hour}
if($Minute < 10) {$Minute = "0" . $Minute}
if($Second < 10) {$Second = "0" . $Second}
$today = "$RealYear-$Month-$DayOfMonth $Hour:$Minute:$Seconds";

#[COLOR="red"] Разбор строки запроса[/COLOR]
if ($ENV{'REQUEST_METHOD'} eq "GET") { $query_string = $ENV{'QUERY_STRING'}; }
elsif ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); }
my @splitedqs = split (/&/, $query_string);
foreach $splitedqs (@splitedqs) {
@qskv = split (/=/, $splitedqs);
$qskv[1] =~ tr/+/ /;
$qskv[1] =~ s/%([dA-Fa-f][dA-Fa-f])/ pack ("C", hex ($1))/eg;
$q{$qskv[0]} = $qskv[1];
}

занесение информации о посетителе в

Посетитель заходит на сайт, смотрим, первый ли раз он зашел на сайт за сегодня, одновременно проверяем количество хитов:

$check= $dbh->prepare("SELECT hits FROM counter WHERE ip='$ENV{'REMOTE_ADDR'}' AND vtime='$today'") || die $DBI::errstr; # Берем количество хитов, если запись существует.
$check->execute() or die $check->errstr;
$ipcheck = $check->fetchrow; # Назначаем количество хитов указанной переменной.


Теперь, если значение $ipcheck пустое, то посетитель зашел первый раз а этот день и его нужно добавить в таблицу.
Если посетитель зашел не в первый раз, то значение $ipcheck содержит количество просмотренных страниц.

$refererl=$ENV{'HTTP_REFERER'}; #Текущая страница
$refererl =~ s/&/&amp;/g; $refererl =~ s/</&lt;/g; $refererl =~ s/>/&gt;/g; $refererl =~ s/
//g; $refererl =~ s/
//g; $refererl =~ s/,//g; $refererl =~ s/*//g; $refererl =~ s/#//g; $refererl =~ s/'//g; $refererl =~ s///g; # Проверка на лишние символы
$hits=$ipcheck+1; # Плюс один хит (текущий)

$wherefrom=$q{'r'}; # Реферал (URL)

# ![COLOR="red"] сюда вставить проверку[/COLOR] $wherefrom на лишние символы !

if (!$ipcheck) { # старый посетитель
$dbh->do("update counter set vtime='$today', hits='$hits', lasturl='$refererl'") or die $DBI::errstr or die $DBI::errstr;
} else { # новый посетитель
$dbh->do("insert into counter (vtime,ip,referer,hits,firsturl,lasturl) values ('$today','$ENV{'REMOTE_ADDR'}','$wherefrom','$hits','$refererl','$refererl')") or die $DBI::errstr or die $DBI::errstr;
}

Далее выводим общее количество посетителей и посетителей за сегодня.

$check1= $dbh->prepare("SELECT hits FROM counter WHERE vtime='$today'") || die $DBI::errstr;
$check1->execute() or die $check->errstr;
$nn="0";
while ($ipcheck1=$check1->fetchrow_hashref()) {
$vhits=$vhits+$ipcheck1->{hits};
$nn++;
}

$check2= $dbh->prepare("SELECT count(*) FROM counter") || die $DBI::errstr;
$check2->execute() or die $check->errstr;
$vall = $check2->fetchrow;

Отображение счетчика.

Счетчик можно взять как из картинки, так и нарисовать с нуля.
Ниже приведен пример прорисовки счетчика по линиям.

print "Content-type: image/png

"; # Формат документа - картинка

$im = new GD::Image(88,31); # [COLOR="red"]Создаем изображение размером 88x31 пикселей[/COLOR]

# Назначаем цвета
$white = $im->colorAllocate(255,255,255);
$red = $im->colorAllocate(255,0,0);
$blue = $im->colorAllocate(0,162,255);

$im->rectangle(0,0,87,30,$red); # Рисуем рамку
$im->fill(86,29,$blue); # Заливаем все синим
$im->line(1,16,86,16,gbBrushed); Рисуем линии
$im->line(67,16,60,29,gbBrushed);
$im->line(37,1,31,16,gbBrushed);
$im->fill(85,28,$white); # Два поля, отделенные линиями, заливаем белым
$im->fill(1,1,$white);
$im->rectangle(1,1,86,29,$white); # Белая рамка
$im->rectangle(0,0,87,30,$blue); # Синяя рамка
$im->string(gdSmallFont,3,2,"$vhits",$blue); # Выводим количество сегодняшних хитов
$im->string(gdSmallFont,3,16,"$vall",$white); # Выводим количество всех посетителей
$im->string(gdSmallFont,41,2,"WebZ.Ru",$white);
$im->string(gdSmallFont,68,17,"$vtoday",$blue);# Выводим количество сегодняшних посетителей
binmode STDOUT;
print $im->png; # Вывод на экран

Код счетчика.

Код счетчика стостоит не только из картинки, но и из ява-скрипта, который должен передать страницу, с которой пришел новый посетитель.
Чтобы счетчик не кэшировался, стоит в его код встроить случайное значение.
Пример:

<script language="JavaScript"><!--
document.write("<a href=site.com><img border=0 width=88 height=31 src=site.com?"+Math.random()+"&r="+document.referrer+"></a>");
// --></script>

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыAzinomoney.com - гемблинг-партнерка с 65%RS для каждого
Гарантированный заработок на гемблинг-трафике
65 AzinoMoney 29162 Вчера, 19:10
автор: AzinoMoney
Горячая тема (нет новых ответов) Вёрстка HTML-писем
30 Vampler 28832 Вчера, 12:41
автор: Vampler
Горячая тема (нет новых ответов) Делаю полностью уникальный дизайн для сайтов!
46 AlexDIZ 93439 26.3.2024, 20:03
автор: AlexDIZ
Открытая тема (нет новых ответов) Большие ставки для кликов в Я.Директ. Как удешевить?
2 rownong27 1116 26.3.2024, 14:13
автор: knezevolk
Горячая тема (нет новых ответов) Betatransfer.net - прием платежей для HIGH RISK проектов, интернет эквайринг и мерчант онлайн оплат
52 arendator 34124 26.3.2024, 4:43
автор: arendator


 



RSS Текстовая версия Сейчас: 28.3.2024, 15:05
Дизайн