Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться 
:(
    Опции темы
eaa
Дата 11.10.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.9.2009

Репутация: нет
Всего: нет



Вот программа:

#!/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 (<LOG>) {
    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}\&nbsp\;${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 = "<B><FONT COLOR=red>$name:</FONT> $from</B>";
        $old_from = "<A HREF=\"$old_from\">[Q] </A>";
        $from = $old_from . $from;
        $found=1;
        }
    }

print <<"END";
<HTML>
<HEAD><TITLE>Access Analysis</TITLE>
<STYLE>
TH { font-size: x-small; }
TD { font-size: x-small; }
A { text-decoration: none; }
</STYLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
END

if ($lineerrors > 0) {
    print <<"END";
$lineerrors lines were ignored. Are you sure your log file is in the Extended Log Format?<br>
An ELF entry looks like this example:<br>
<TT><NOBR>host.domain.com - - [10/Jul/1999:12:34:56 -0500] "GET / HTTP/1.1" 200 2376 "http://referer.com" "Browser Name"</NOBR></TT>
<BR><BR>
The following lines were ignored:<br>
<tt>
END
    foreach (@badlines) {
        print "<NOBR>$_</NOBR><br>";
        }
    print "</tt><br>";
    }

print <<"END";
<TABLE BORDER=1 CELLPADDING=1 CELLSPACING=0>
END

foreach $site (sort {$first{$b} <=> $first{$a}} keys %sessions) {
print <<"END";
<TR>
<TD COLSPAN=4 BGCOLOR="#cccccc" ALIGN=LEFT>
  <B>$site</B> - $agent{$site}
</TD>
</TR>
<TR>
<TH>Date</TH>
<TH>Page</TH>
<TH>Status</TH>
<TH>Referer</TH>
</TR>
END

  foreach (@{$sessions{$site}}) {
    ($date,$page,$status,$bytes,$from) = split(/\|/,$_);

    # Search keywords
    $found=0;
    if ($from =~ /\?/) {  # Query results?
        &search_words("Excite","excite.com","search");
#        &search_words("","","");
#        &search_words("","","");

        unless ($found) {
            if ($from =~ /^http/) {
                $from = "<A HREF=\"$from\">$from</A>";
                }
            }
        }
    elsif ($from =~ /^http/) {
        $from = "<A HREF=\"$from\">$from</A>";
        }

    # Modify based on content-type
    if ($page =~ /\.zip$/) {
        $page = "<B>" . $page . "</B>";
        }
    if ($page =~ /\.jpg$/) {
        $page = "<font color=green>" . $page ."</font>";
        }



    if ( ($status !~ /^2/) && ($status !~ /^304/) ) {
        $status = "<font color=red>$status</font>";
        }

    print <<"END";
<TR>
<TD>$date</TD>
<TD>$page</TD>
<TD>$status</TD>
<TD>$from</TD>
</TR>
END
    }

    }
print "</TABLE>\n\n";


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

Подскажите, пожалуйста, что означают строчки:

1) /^(\S+)\s*(\S+)\s*(\S+)\s*\[([^\]]+)]\s*\"([^\"]+)"\s*(\S+)\s*(\S+)\s*\"\s*([^\"]*)\s*\"\s*\"\s*([^\"]*)\s*\"\s*$/o)

2)($page =~ /\.gif/) в строке     next if ($page =~ /\.gif/);

3)$from =~ s|$local||;

4)$old_from = $from;
    if (($from =~ /$url/i) && ($from =~ /[\?\&]$string\=/)) {
        $from =~ s|.*[\?\&]$string=([^\&]*).*|$1|;
        $from =~ s|\+| |g;
        $from =~ s/%(..)/pack("c",hex($1))/ge;
        $from = "<B><FONT COLOR=red>$name:</FONT> $from</B>";
        $old_from = "<A HREF=\"$old_from\">[Q] </A>";
        $from = $old_from . $from;
        $found=1;

5)А здесь что происходит вообще непонятно:

<HTML>
<HEAD><TITLE>Access Analysis</TITLE>
<STYLE>
TH { font-size: x-small; }
TD { font-size: x-small; }
A { text-decoration: none; }
</STYLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
END

if ($lineerrors > 0) {
    print <<"END";
$lineerrors lines were ignored. Are you sure your log file is in the Extended Log Format?<br>
An ELF entry looks like this example:<br>
<TT><NOBR>host.domain.com - - [10/Jul/1999:12:34:56 -0500] "GET / HTTP/1.1" 200 2376 "http://referer.com" "Browser Name"</NOBR></TT>
<BR><BR>
The following lines were ignored:<br>
<tt>
END
    foreach (@badlines) {
        print "<NOBR>$_</NOBR><br>";
        }
    print "</tt><br>";
    }

print <<"END";
<TABLE BORDER=1 CELLPADDING=1 CELLSPACING=0>
END

foreach $site (sort {$first{$b} <=> $first{$a}} keys %sessions) {
print <<"END";
<TR>
<TD COLSPAN=4 BGCOLOR="#cccccc" ALIGN=LEFT>
  <B>$site</B> - $agent{$site}
</TD>
</TR>
<TR>
<TH>Date</TH>
<TH>Page</TH>
<TH>Status</TH>
<TH>Referer</TH>
</TR>
END


PM MAIL   Вверх
Bulat
Дата 12.10.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



eaa, 

1) регулярное выражение
2) регулярное выражение в условии
3) опять регулярное выражение
4) регулярное выражение в основном
5) вывод html-разметки, причем даже для уровня начинающего довольно кудряво и не красиво. smile

встречный вопрос, насколько хорошо знаком с перл??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
eaa
Дата 12.10.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.9.2009

Репутация: нет
Всего: нет



Мы с Perl знакомы всего 1 неделю smile 
А можно поподробнее?
PM MAIL   Вверх
JackYF
Дата 12.10.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



eaa, используйте кнопку "Код" для форматирования кода и используйте названия тем, которые отображают её суть.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
eaa
Дата 12.10.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.9.2009

Репутация: нет
Всего: нет



Кто-нибудь может объяснить что значит строчка
$from =~ s/%(..)/pack("c",hex($1))/ge;

Добавлено через 12 минут и 39 секунд
И еще вот это, вообще не понятно что такое(((((((((((
$from = "<B><FONT COLOR=red>$name:</FONT> $from</B>";
$old_from = "<A HREF=\"$old_from\">[Q] </A>";

PM MAIL   Вверх
KSURi
Дата 12.10.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 2
Всего: 27



Мимо кассы)

Первое - perldoc perlre. Второе - не понятно, что вам не понятно.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
eaa
Дата 12.10.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.9.2009

Репутация: нет
Всего: нет



Что такое FONT COLOR и A HREF?
PM MAIL   Вверх
OutlawZ
Дата 12.10.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата(eaa @  12.10.2009,  20:20 Найти цитируемый пост)
Что такое FONT COLOR и A HREF? 

Девушка это теги html, FONT COLOR задает цвет текста внутри данного тега, а A HREF это ссылка ,
Код

<a href="адрес">Тыкни </a>
 

А строчка:
Код

~ s/%(..)/pack("c",hex($1))/ge

Это регулярное выражения, задает поиск чего то там или ищет совпадения по шаблону хз чего, я правда код не смотрел честно в падлу . 

Хы-хы что бы понять что такое теги и для чего они вообще, наберите в гогле "html теги" и полное описание тегов откроется для тебя!

Код

5)А здесь что происходит вообще непонятно:

<HTML>
<HEAD><TITLE>Access Analysis</TITLE>
<STYLE>
TH { font-size: x-small; }
TD { font-size: x-small; }
A { text-decoration: none; }
</STYLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
END


Тут задается CSS стиль для  тегов, как показано по параметрам это размер для TH и TD , а для ссылка написано что без всяких подчеркиваний и т.д

Это сообщение отредактировал(а) OutlawZ - 12.10.2009, 21:05


--------------------
user posted image
user posted image
PM MAIL   Вверх
eaa
Дата 12.10.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.9.2009

Репутация: нет
Всего: нет



Спасибо.
За "мужика" обидно, потому что я девушка smile 
PM MAIL   Вверх
krypt3r
Дата 13.10.2009, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: нет
Всего: 16



Цитата

Кто-нибудь может объяснить что значит строчка
$from =~ s/%(..)/pack("c",hex($1))/ge;

Это преобразование строки типа %30%31%32%33%34%35%36%37%38%39 в нормальный вид - 0123456789 (urldecode).
PM MAIL   Вверх
Bulat
Дата 14.10.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(eaa @  12.10.2009,  20:20 Найти цитируемый пост)
Что такое FONT COLOR и A HREF? 

мне кажется, что не только с перл, а вообще с программированием только недавно познакомилась?? тогда лучше начать с чтения учебников и с более простых примеров типа "Hello World!" ;)


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
krypt3r
Дата 14.10.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: нет
Всего: 16



Скорее всего, следует начать с изучения HTML =)
PM MAIL   Вверх
Bulat
Дата 15.10.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(krypt3r @  14.10.2009,  11:36 Найти цитируемый пост)
Скорее всего, следует начать с изучения HTML =) 


HTML - не язык программирования, собс-но лично я его даже не изучал, само пришло... А вот перл почитать, поразбираться пришлось.. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
eaa
Дата 15.10.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.9.2009

Репутация: нет
Всего: нет



Народ, спасибо за советы smile 
Я читаю, читаю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.