ПЕРЕКУСИМ ПЕРЛОВКОЙ?
DemiurG (arkhangel@mail.ru)
Спецвыпуск Xakep, номер #033, стр. 033-062-3
$sth = $dbh->prepare (qq {select name from traffik where ip='$ip' order by ip desc}) or die;
$sth->execute;
$name=$sth->fetchrow_array();
print "<div align=right><b><font color=red>[пользователь $name в системе]</font></div>";
А проверка на админа в самом начале:
"if ($name ne "admin")...", хотя это и так понятно в принципе.
Бацая скрипт, я использовал модули: CGI (входит в поставку Perl) - позволяет обращаться к интерфейсу CGI. Через CGI мы получаем ip пользователя:
my $ip=$ENV{REMOTE_ADDR};
через который уже узнаем его имя.
CGI::Carp - выводит сообщение об ошибке прямо в экран браузера. Очень удобно для отладки.
http://search.cpan.org/CPAN/authors/id/L/LD/LDS/CGI.pm-2.97.tar.gz
DBI - интерфейс для работы с базой, может еще потребоваться DBD::MySQL.
http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.37.tar.gz
http://search.cpan.org/CPAN/authors/id/R/RU/RUDY/DBD-mysql-2.9002.tar.gz
Tie::IxHash (http://search.cpan.org/CPAN/authors/id/G/GS/GSAR/Tie-IxHash-1.21.tar.gz) сортирует ключи хэша (это требуется при выводе месяцев, так как они представляют собой хэш и требуется, чтобы февраль шел после января, ну и т.д.):
tie %month, "Tie::IxHash";
%month=('январь'=>"01",
'февраль'=>"02",
'март'=>"03",
'апрель'=>"04",
'май'=>"05",
'июнь'=>"06",
'июль'=>'07',
'август'=>'08',
'сентябрь'=>'09',
'октябрь'=>'10',
'ноябрь'=>'11',
'декабрь'=>'12'
);
Скачать все можно с http://search.cpan.org/. Установка стандартная:
perl Makefile.PL ;
make
make test
make install
Для того чтобы создать таблицу (с уже заполненными данными), я использовал такой нехитрый цикл.
while (@ary = $sth->fetchrow_array())
{
print "<TR>\n";
print ("<TD>", shift (@ary)) while @ary;
print "</TR>\n";
}
В массиве @ary уже есть данные, полученные отсюда:
$sth = $dbh->prepare (qq {select date, mb from traffik where name='$name' and date like '$year-$month-%'}) or die;
$sth->execute();
$ary=$sth->fetchrow_array();
Теперь ты все понял: с помощью скрипта ipastat.pl (а точнее - команды "ipastat -x -R . -n") мы обрабатываем вывод IPA, в результате чего создается (или обновляется) таблица traffik в базе traff2. Юзер заходит на веб-сервер, и благодаря инструкции "my $ip=$ENV{REMOTE_ADDR};" мы узнаем его ip -> ищем последнюю запись в базе по этому ip -> находим -> получаем его имя - и уже делаем выборку по его имени. Если сеть более глобальная и небезопасная, можно к апачу (на котором крутится mysql.cgi) прикрепить аутентификацию, но это уже твое личное дело.