Поиск

Счетчики посещений

На Web-страницах иногда можно увидеть нечто, именуемое счетчиком щелчков или индикатором числа посещений. Предположительно он отражает, сколько раз посетили данную Web-страницу. Пример такого индикатора показан на рис. 23.3.

Показания счетчиков посещений связаны с множеством проблем. Прежде всего, что означает это число? Можно предположить, что большое значение этого числа "щелчков" говорит о высокой популярности данной страницы. Но разве популярность страницы означает, что она так уж хороша? Совсем необязательно. Посетив какую-нибудь Web-страницу, вы либо находите нужную информацию, либо нет. Качество страницы — в ее значимости именно для вас, а не для других.

По сути, счетчик посещений — это своего рода конкурс красоты с незрячими членами жюри. Представленное счетчиком число совсем не означает число людей, посетивших вашу страницу. В лучшем случае — это просто неточная оценка. Почемуже эти счетчики так неточны? Вероятно, на это есть несколько причин.

Прежде всего, следует сказать, что нет такого правила, которое бы предписывало, чтобы счетчик посещений начинал отсчет с нуля. Когда вам выдавали чековую книжку, то номер первого чека разве был равен #1? По всей вероятности, при заказе чековой книжки вам разрешалось выбрать начальный номер чека. И если у вас есть некоторый опыт в общении с банковскими служащими, вы выберете в качестве начального номер побольше, чтобы тем самым создать впечатление, что у вас довольно продолжительные отношения с этим банком. Маленький номер может заставить клерка дважды проверить ваш идентификатор и не исключено, что он вообще откажется принимать чек. Администраторы Web-узлов часто устанавливают начальные значения счетчиков посещений большими, чтобы их Web-узлы выглядели более "популярными", чем они есть на самом деле.

Вторая проблема, связанная со счетчиками посещений, — это Web-роботы, которые также называются пауками, червями и пр. Они представляют собой автоматические процессы поиска данных в Web (иногда просто с целью отыскать некоторую справочную информацию, а иногда для построения индексов интересных Web-узлов). Вы когда-нибудь интересовались, как AltaVista, Google или HotBot строят свои индексы? Они "просматривают" Web, посещают "нужные" страницы, что в конце концов приводит к "взлету" показаний счетчиков на незаслуженную высоту.

Следующая проблема связана с кнопкой Refresh (Обновить) Web-броузеров. При каждом "обновлении" счетчик посещений делает новую "зарубку". Тогда выходит, что если щелчок на кнопке перезагрузки увеличивает показания счетчика, то эти показания на самом деле не означают количество посетителей вашего узла, не так ли?

Последняя и самая важная проблема связана с кэшированием. На 17-м занятии, "Введение в CGI", была приведена схема подключения броузера к Web-серверу. В ней не учтены некоторые важные детали, которые показаны на рис. 23.4.

Если Web-броузер размещен внутри домена такого крупного провайдера услуг Internet (ISP), как aol.com или home.com с многомиллионным отрядом абонентов, то такой ISP использует кэширующее устройство, именуемое proxy-сервером. Это кэши-рующее устройство можно рассматривать как посредника между Web-броузером и Web-сервером. После щелчка на гиперссылке некоторой Web-страницы этот запрос отправляется proxy-серверу, который "достает" эту страницу для вас из Internet и отправляет ее обратно вашему броузеру. При этом proxy-сервер сохраняет копию этой страницы для "себя" (рис. 23.5). Если кто-нибудь еще в том же домене запросит ту же страницу, proxy-сервер не станет утруждать себя повторной ее загрузкой из Internet, a воспользуется сохраненной (на всякий случай) копией.

При сохранении на proxy-сервере копии страницы искусственно уменьшается количество посещений, отображаемых счетчиком. При кэшировании функция remote_host часто будет возвращать одно и то же значение, даже несмотря на то, что страница запрашивается различными пользователями.

Пользователи Web, находящиеся в больших организациях и университетах, часто защищены системами-брандмауэрами (firewall), которые действуют подобно proxy-серверам. Каждый запрос страницы, исходящий от одного из этих узлов, скорее всего не будет учтен в счетчике посещений, поскольку он перехватывается proxy-сервером.
А теперь, собственно, перейдем к счетчику посещений

Если, прочитав предыдущий раздел, вы еще не отложили эту книгу в сторону, то можно предположить, что вас интересует создание такого счетчика посещений для своей Web-страницы. Есть два основных типа счетчиков посещений для Web-страниц: текстовый и графический. Сначала рассмотрим текстовый счетчик, а затем — графический, после чего обсудим возможности улучшения "моделей" счетчиков.

Для обеспечения работоспособности счетчика посещений используйте возможности серверных включений (server-side include ~SSI), с которыми вы познакомились на 20-м занятии, "Работа с HTML-кодом и CGI-программами". Если, например, CGI-программу организации работы такого счетчика назвать hits.cgi, то с помощью дескрипторов SSI ее можно включить в любую страницу:

Исходный код CGI-программы счетчика посещений представлен в листинге 23.3.

Проведем анализ программы.

  • Строка 18. Без блокировки не обойтись, поскольку с файлом счетчика посещений могут выполнять операции чтения и записи несколько процессов одновременно.
  • Строки 20—23. Считывается содержимое файла, имя которого указано в переменной $counterfile. Пока это и есть количество посещений.
  • Строки 28—30. Содержимое счетчика посещений снова записывается в файл, имя которого указано в переменной $counterfile.
  • Строка 32. Снимается блокировка.

Большая часть программы, представленной в листинге 23.3, не должна отпугивать вас неизвестными элементами. Однако обратите внимание на выполнение операции блокировки файла и примеры с использованием блокировок, описанные на 15-м занятии, "Обработка данных в Perl".

Блокировку файлов необходимо выполнить на случай, если два пользователя попытаются практически одновременно загрузить вашу Web-страницу. Если операции чтения и записи файла счетчика посещений Web-страницы не синхронизировать, то показания этого счетчика могут увеличиваться или слишком быстро, или слишком медленно, а то и вообще может произойти порча файла. В этом случае вряд ли можно говорить о приемлемой точности показаний счетчика.

Графический счетчик посещений

Чтобы внести изюминку в оформление счетчика посещений, можно воспользоваться различными способами. Остановимся на трех. Первый предполагает составление графического изображения, представляющего все возможные значения счетчика, и его отображение при необходимости. Этот метод отличается большими временными затратами при увеличении числа посетителей Web-узла.

Второй метод состоит в использовании CGI-программы на языке Perl, которая бы сама генерировала нужные графические изображения для счетчика посещений. Модуль GD, доступный в CPAN, как раз предназначен для создания графических изображений с использованием Perl-программ. Воспользуйтесь им, чтобы внести в свой счетчик элемент оригинальности. К сожалению, подробное знакомство с модулем GD выходит за рамки этой книги.

Проще всего создать 10 изображений, представляющих цифры от 0 до 9. Затем при увеличении показаний счетчика ваша программа может выводить HTML-код с дескрипторами <IMG>, которые поместят эти цифры на нужное место (рис. 23.6). Но вам, конечно, придется создать изображения, представляющие эти цифры. CGI-программа на языке Perl, представленная в листинге 23.4, написана в предположении, что файлы изображений имеют следующие имена: digit_O.jpg, digit_l.jpg и т.д., вплоть до файла digit_9.jpg.

Для обеспечения работоспособности счетчика запускайте CGI-программу в режиме серверного включения, как было описано на 20-м занятии, "Работа с HTML-кодом и CGI-программами". Если, например, CGI-программу такого счетчика назвать graphical_hits.cgi, то с помощью дескрипторов SSI ее можно включить в любую страницу:

Исходный код графического счетчика посещений Web-страницы представлен в листинге 23.4.

Листинг 23.4 по сути повторяет листинг 23.3, но содержит небольшие отличия.

  • Строка 9. Здесь в переменной $image_url содержится базовый URLдля изображений цифр. Однако следует помнить, что это должен быть URL, которым для загрузки изображений воспользуется броузер, а не полный путь к файлам изображений, находящихся на локальном диске.
  • Строки 34—35. Число в счетчике посещений — $hits - дробится на отдельные символы, и каждая цифра по очереди присваивается переменной $digit. Затем для каждой цифры создаются дескрипторы <IMG>.