Як написати лічильник відвідуваності на Perl - Perl - WEB Програмування - Каталог статей
Створення таблиць у MySQL.
Відповідно створюємо таблицю з вищеописаними стовпцями:
Якщо завдання лічильника - підраховувати відвідувачів одного сайту, то можна обмежитися цією таблицею, якщо потрібно підраховувати більше одного сайту, варто завести ще одну таблицю зі стовпцями:
200?'200px':''+(this.scrollHeight+5)+'px');"> #/usr/bin/perl -w use DBI; # Завантажуємо модуль для роботи з MySQL use GD;# Завантажуємо модуль для роботи з графікою
$w_database="counter"; ім'я MySQL бази $w_host="localhost"; # Адерс MySQL сервера. Зазвичай MySQL сервер встановлений разом із web-server'ом, тому пишемо localhost. $w_user=""; # Логін для входу MySQL $w_password=""; # Пароль для входу в MySQL
# З'єднуємося з MySQL за заздалегідь створеними: базою, користувачем, паролем $dbh = DBI->connect("DBI:mysql:$w_database:$w_host",$w_user,$w_password) die $DBI::errstr;
# Обчислюємо сьогоднішню дату та призначаємо змінну, яка містить дату у форматі MySQL. ($Second, $Minute, $Hour, $DayOfMonth, $Month, $Year, $Weekday, $DayOfYear, $IsDST) = localtime(time); $RealYear = $Year + 1900; $Month++; if($Month $check= $dbh->prepare("SELECT hits FROM counter WHERE ip='$ENV' AND vtime='$today'") die $DBI::errstr; # Беремо кількість хітів, якщо запис існує. $check->execute() or die $check->errstr; $ipcheck = $check->fetchrow;# Призначаємо кількість хітів зазначеної змінної.
$ refererl = $ ENV; #Поточна сторінка $refererl =
s///g; # Перевірка на зайві символи $hits=$ipcheck+1; # Плюс один хіт (поточний)
$wherefrom=$q; # Реферал (URL)
#! сюдивставити перевірку $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','$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->; $nn++; >
$check2= $dbh->prepare("SELECT count(*) FROM counter") die $DBI::errstr; $check2->execute() or die $check->errstr; $vall = $check2->fetchrow;
Відображення лічильника.Лічильник можна взяти як з картинки, так і намалювати з нуля. Нижче наведено приклад промальовування лічильника по лініях.
200?'200px':''+(this.scrollHeight+5)+'px');"> print "Content-type: image/png
Формат документа - картинка
$im = новий GD::Image(88,31); # Створюємо зображення розміром 88x31 пікселів
# Призначаємо кольори $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; # Виведення на екран
Код лічильника. Щоб лічильник не кешувався, варто в його код вбудувати випадкове значення.