Программирование > Perl
Помощь за вознаграждение
eaa:
При помощи программы можно получать следующую информацию о сайте: кол-во посетителей, какие именно странички каждый посетитель смотрел, дату и время посещения, какие ссылки нажимал, какие слова набирал в системе поиска для того чтобы найти сайт и по какой ссылке он попал на сайт.
и если я не ошибаюсь - эта прога работает верно исключительно под локальным сервером)
а как это исправить?
Вот сама программа:
#!/usr/bin/perl
#
# Matt Kruse
# http://mkruse.netexpress.net/
#
print "Content-type: text/html\\n\\n";
$tail = $ENV{\'QUERY_STRING\'};
$tail = $tail || 250;
# Location of the log file in Extended Log Format
$log = "/etc/httpd/logs/mkruse-access_log";
# Local domain name to cut out of referer info
$local = "http://mkruse.netexpress.net";
# -------------------------
%MONTHS=(
\'Jan\',\'01\',\'Feb\',\'02\',\'Mar\',\'03\',\'Apr\',\'04\',\'May\',\'05\',\'Jun\',\'06\',
\'Jul\',\'07\',\'Aug\',\'08\',\'Sep\',\'09\',\'Oct\',\'10\',\'Nov\',\'11\',\'Dec\',\'12\'
);
sub ReadLog {
$LOG=shift;
open (LOG,"tail -$tail $LOG |") || print "ERROR: Couldn\'t open the log file: $LOG";
$lineerrors=0;
LOGLOOP: while () {
unless
(($site,$rfc931,$user,$when,$request,$status,$bytes,$from,$agent)=
/^(\\S+)\\s*(\\S+)\\s*(\\S+)\\s*\\[([^\\]]+)]\\s*\\"([^\\"]+)"\\s*(\\S+)\\s*(\\S+)\\s*\\"\\s*([^\\"]*)\\s*\\"\\s*\\"\\s*([^\\"]*)\\s*\\"\\s*$/o)
{
$lineerrors++;
push (@badlines,$_);
next;
}
($page) = ($request =~ m|[^\\/]*(\\S*)|);
next if ($page =~ /\\.gif/); # skip the gifs
$site="\\L$site";
# get all the time info
($date,$month,$year,$hour,$min,$sec) = ($when =~ m|(..)/(...)/..(..):(..):(..):(..)|o);
$month = $MONTHS{$month};
$datestamp = $year . $month . $date . $hour . $min;
unless ($first{$site}) { $first{$site} = $datestamp; }
$datestring = "${month}/${date}\\ \\;${hour}:${min}";
$from =~ s|$local||;
# Record the browser info
$agent{$site} = $agent;
# Update the array for site
$line = join("|",$datestring,$page,$status,$bytes,$from);
push(@{$sessions{$site}},$line);
}
close(LOG);
}
&ReadLog($log);
sub search_words {
return if ($found);
my($name) = shift;
my($url) = shift;
my($string) = shift;
$old_from = $from;
if (($from =~ /$url/i) && ($from =~ /[\\?\\&]$string\\=/)) {
$from =~ s|.*[\\?\\&]$string=([^\\&]*).*|$1|;
$from =~ s|\\+| |g;
$from =~ s/%(..)/pack("c",hex($1))/ge;
$from = "$name: $from";
$old_from = "[Q] ";
$from = $old_from . $from;
$found=1;
}
}
print
arto:
смените имя лога-файла
eaa:
Что значит смените? Не из головы же его брать?
arto:
из конфигурационных файлов вашей системы.
eaa:
А это как?
Навигация
Перейти к полной версии