Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #27, ФЕВРАЛЬ 2003 г.

ЖЕМЧУЖНЫЙ САЙТ - cкриптинг на перле

Леха ББ ака Alexys

Спецвыпуск Xakep, номер #027, стр. 027-026-6


print "<table cellspacing=0 cellpadding=0 border=0 width=100% bgcolor=#FFCC99>\n";

print "<tr><td>\n";

$navifile=$maindir.'navi.txt';

open(NAV, "$navifile");

@navi=<NAV>;

close (NAV);

foreach (@navi)

{

print $_;

}

print "</td></tr></table>\n";

Остались закрывающие HTML-тэги и завершение работы скрипта.

print "</body></html>";

exit;

Это еще не конец.

Написанный скрипт один из самых простых. Его еще можно много как модифицировать, например, заставить его вести учет просмотренных страниц.

#--ведение---файла--статистики----

$statfile=$maindir.'stat.txt';

$adres=$ENV{'QUERY_STRING'};

$lock='~ci-temp.tmp';

# Проверка на существование файла статистики; если такого файла нет, то скрипт его создаст

open(FILE, ">>$statfile");

close(FILE);

# теперь файл стопудуво существует, поэтому открываем его для чтения,

open(FILE, "$statfile");

@indata = <FILE>;

close(FILE);

$onoff = 0;

&Lock;

#Ставим блокировку, чтобы несколько копий скрипта не писали одновременно в один и тот же файл - иначе такая каша может получиться :(

open(FILE, ">$statfile");

foreach $temp (@indata)

{

chomp($temp);

($name, $uri, $count) = split(/;;/, $temp);

if ($uri eq $adres)

{

$count++;

$onoff = 1;

print FILE "$name;;$uri;;$count\n";

}

else

{

print FILE "$name;;$uri;;$count\n";

}

}

#В этом цикле мы перебираем все уже известные нам адреса, и если запрошенный сейчас адрес совпадает с одним из известных - увеличиваем счетчик на единицу.

if ($onoff eq 0)

{

print FILE "$chname;;$adres;;1\n";

}

#Если выясняется, что текущего адреса мы никогда не видели (ну, вдруг ты новую статью только что добавил или кто-то пытался своими кривыми ручонками поиграть с параметрами твоего скрипта), то мы добавляем в файл статистики новую строку и ставим ее счетчик в единицу.

close(FILE);

#Файл закрыли, теперь снимаем блокировку

&Unlock;

#-------------------------------------------------------------

# Lock: Проверка блокировки

#-------------------------------------------------------------

sub Lock {

$timecheck = 0;

while(-e $lock)

{

sleep(5);

$timecheck = $timecheck + 1;

if ($timecheck >= 6)

{

unlink("$lock");

}

}

open(LOCKFILE,">$lock");

close(LOCKFILE);

return;

}

#-------------------------------------------------------------

# Unlock: Снятие блокировки

#-------------------------------------------------------------

sub Unlock {

unlink("$lock");

Назад на стр. 027-026-5  Содержание  Вперед на стр. 027-026-7