Яндекс цитирования
 

CGI/PERL : практика программирования

 

[ В начало раздела ]

Пишем менеджер управления ссылками (URL)

дата публикации 25 июня 2001г.

На написание скрипта, позволяющего подсчитывать число нажатий на той или иной ссылке (конечно же и выводить документ по этой ссылке), а также позволяющий отображать число этих самых нажатий, подтолкнули посетители моего сайта за что им большое спасибо.

Где можно использовать такой менеджер? Например, для подсчета числа скачиваний Ваших файлов и архивов посетителями сайта. Смотрите работающий скрипт на странице "Архив".

Реальная работа технологии управления ссылками

1. Реальная работа технологии управления ссылками

Еще раз опишу, чего бы хотелось получить от создаваемого скрипта:
  • 1. Корректно выводить документ по запрашиваемому URL
  • 2. Сохранять в файле число нажатий на конкретной ссылке
  • 3. Автоматически дополнять базу ссылок новыми и незарегистрированными ссылками
  • 4. Предоставлять вывод числа нажатий на ссылке

Теперь мы можем создать в корне WEB-сайта файл-базу для нашего менеджера - "links.txt". Этот файл и будет хранить всю информацию о ссылках и числе нажатий на них. Формат записи по каждой ссылке будем использовать следующий: URL ссылка>>число нажатий

Просто, не правда ли? Символ-разделитель ">>" используем потому, что его редко встретишь в URL.

Итак, разберемся с пунктами 1-3 поставленного нами задания. Именно в них заложено ядро нашего менеджера. Ссылка, которая требует управления будет выглядеть следующим образом:

<a href="/cgi-bin/links.pl?link=anyURL">Текст ссылки</a>
Заметьте, что параметр link описывает URL. Он может быть полным ( http://dolgov.hut.ru/programming/index.html ), а может быть относительным ( /news.html ).

  # инициализация переменных
  $isfind = 0;
  $count = 0;
  $record = 0;

# просматриваю файл на наличие ссылки foreach $temp (@linksfile) { if ($temp =~ /^$link>>/) { ($links,$count) = split(/>>/,$temp); # увеличиваю счетчик и замещаю строчку в файле $count++; $linksfile[$record] = sprintf("%s>>%d\n",$link,$count); $isfind = 1; last; } $record++; # счетчик строк файла описания } if ($isfind eq 0) { # автоматически добавляю в файл запись о ссылке, если ее еще нет $temp = "$link>>1\n"; push(@linksfile, $temp); }

# если успешно, записываю обновление в файл open (download,">$LINKS_FILE"); print (download @linksfile); close (download);

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

print "Location: http://dolgov.hut.ru/"\n\n";

Вот оставшийся фрагмент:

  # !!! основная строка - вывод файла по ссылке пользователю
  if ($link !~ /^http:\/\//) {
    # трансформирую относительный URL в абсолютный
    $link = "$ENV{'HTTP_HOST'}\/$link";
    $link =~ s#\/\/#\/#g;
    $link = "http:\/\/$link";
  }
  print "Location: $link\n\n";

Теперь же, можем переходить к пункту 4 - вывод числа нажатий по ссылке. Для реализации этого пункта используем технологию Server Side Include (SSI). В тело HTML-страницы включаем следующую SSI-инструкцию, выполняющую наш скрипт и помещающую результат в требуемое место нашей страницы:

Для WEB-серверов под Unix:
<!--#include virtual="/cgi-bin/links.pl?cmd=count&link=http://localhost/news.html" -->
Для Internet Information Server (Windows):
<!--#exec cgi="/cgi-bin/links.pl?cmd=count&link=http://localhost/news.html" -->

Алгоритм этой части прост: просматривать файл ссылок до нахождения записи о ссылке, извлечь из строки и вывести пользователю число нажатий на ссылке.

Вот фрагмент кода:

  # снять ремарку ниже, если web-сервер под Unix
  #  print "Content-type: text/html\n\n"; 
  $count = "0"; # значение для вывода по умолчанию
  # начинаю работать с файлом построчно
  # просматриваю файл на наличие ссылки
  foreach $temp (@linksfile) {  
    if ($temp =~ /^$link/) {
      ($links,$count) = split(/>>/,$temp);
      last;
    }
  }
  print $count;  # вывожу число нажатий на ссылку

На рисунке ниже представлен результат работы нашего менеджера.

Результат работы менеджера URL

2. Результат работы менеджера URL

Конечно же этот подход уже реализован в скриптах и даже описан в моей статье "Создание и управление архивом файлов вашего сайта". Но думаю, что описанное выше поможет Вам без проблем внедрить технологию управления ссылками в любой из Ваших скриптов.

Скачать исходники описываемого в статье скрипта можно здесь! (zip-архив 132Кб)

Ссылки по теме:

© Долгов Сергей

 

[ В начало раздела ]


 

 

Все для web-дизана!!! Бард-Путеводитель Много Всего CGI-Гид. Лучшие скрипты... WDH - WebDesignHelp - CGI, JAVA, APPLETS, TOP100! Раскрутка, увеличение посещаемости и индекса цитируемости в поисковых системах.

© 2000-2002 Долгов Сергей

dolgov_sergei@mail.ru

X