6254
Проект
Лічильник відвідувань сторінок сайту
З чого все почалося 

Ідея створити власний лічильник в мене виникла давно, у ті часи коли я прочитав першу книжку по Perl (доречі, це була така книга Холзнер С. "Perl: Специальный справочник" - СПб: Питер, 2000. - 496с. За іронією долі мені її подарувала кохана дівчина :@) ). У цьому довідникові була глава, що доволі зрозуміло описувала приклад лічильника. Досить скоро я створив і свій лічильник. Він був досить примітивний (навіть без блокування файлів), але справно підраховував кількість завантажень. Але тільки коли руки дійшли до власного сайту, я став замислюватись над питанням: "А яким повинен бути справжній лічильник?". Для того, щоб створити по-справжньому добрий лічильник необхідно спочатку визначити, які вимоги ми до нього висуваємо, і чому нам потрібен саме власний лічильник, а не, наприклад, участь у рейтинговій системі чи збір статистики відвідування сайта хостером.

Вимоги до лічильника:

  1. Лічильник має поєднувати в собі ще й журнал відвудувань (тобто не тільки знати скільки користувачів поновило сторінку у браузері, а коли, хто, з якої адреси тощо);
  2. Захист від "накруток" (порожнє поновлення сторінки, занадто швидкий перехід між сторінками, виявленя click-програм, тощо)
  3. Краще рахувати відвідуваня всіх, або найголовніших сторінок (показувати, чи не показувати значення лічильнику на екрані залежить лише від вашого бажання);
  4. Перевагу слід віддавати текстовим лічильникам, або якщо краще висловитись, вбудованим в сторінку на сервері (по-перше, малюнки користувач може відключити у браузері, по-друге, розмір навіть дуже маленького малюнку у декілька разів більший за текстовий рядок, а по-третє, лічильник не повинен залежати від браузера, а якщо й залежати, то в мінімальній мірі);
  5. Журнал відвідування потрібно постійно аналізувати за допомогою спеціального скрипту, з метою виявлення змін поведінки відвідувачів сайту;
  6. Показ статистики всім користувачам залежить від спрямованості сайту. В певних комерційних проектах це не бажано;
  7. Перенесення лічильнику на інший сайт повинно відбуватися без змін у його коді;
  8. Для статичних сайтів (html, обмеження хостінгу) теоретично можливо використовувати графічні лічильники з інших хостів, або використання відомого тегу IFRAME для посилання як на текстовий, так і графічний лічильник (але при такому підході см втрачаємо частину відвідувачів);
  9. Лічильник слід писати виключно на Perl :)

Думки з приводу встановлення лічильнику на сайт

Думаю ні в кого не викликає сумніву справжня причина встановлення лічильнику. Це досить простий та надійний спосіб визначити популярність ресурсу. Звичайно є й альтернативні методи. Найпростіший - домовитись з хостінг-компанією про збір та аналіз статистики відвідувань сторінки, але не варто забувати, що ця послуга платна (бесплатна, як правило, лише на платних хостінгах :) ) та й результати будуть незавжди у потрібному для вас вигляді. Напраклад, популярний сервісний засіб управління хостінговим акаунтом cPanel дозволяє отримувати статистику у різних формах. Якщо Ви можете власноруч аналізувати log-файл сервера, то це мабуть буде найкращій (найнадійніший) спосіб дізнатись хто був на Вашому сайті.

Досить популярним Internet-сервісом є встановлення на сторінку графічного лічильника певного рейтингу. У цього методу є перевага в тому, що майже завжди Ваш сайт потрапить до впорядкованого за популярністю каталога. І якщо він матиме багато відвідувачів (буде знаходитись на горі рейтингу) це додатково приведе на Ваш сайт тих, кого зацікавить відповідь на питання: "А що ж на цьому сайті такого цікавого, що примусило подивитись на нього таку силу користувачів?". До того ж у цих служб досить перевірена система обліку, тому що вона розрахована на великий мережевий трафік (кількість одночасно працюючих з сайтом користувачів), а відповідно можна не лякатись тисяч бажаючих побачити це диво, перепрошую Ваш сайт. На жаль, якщо користувач відключить малюнки у своєму браузері, то такий лічильник працювати не буде. Але чи варто на це зважати, IE це ж вам не Lynx. До того ж, обираючи популярну лічильну систему ви можете втратите ще певний відсоток "прореєстрованих" відвідувачів. Секрет криється у налагодженні проксі-серверів крупних компаній, які заради мінімізації веб-трафіку забороняють показ банерів та графічних лічильників.

Згадав кумедний випадок з власної практики. Якось зайшов на сайт, де на головній сторінці крім заголовку та кнопки "Увійти" було розташовано з десяток лічильник різних рейтинг-лічильників. Як Ви вже й здогадались всі вони показували різні значення. До цього слід звикати, тому що кожна служба по-своєму підходить до вирішення поняття, що вважати за відвідування сайту. Для де кого це унікальний IP, іншим подавай активність протягом певного часу (декількох хвилин) тощо.

Технічні характеристики реалізації лічильника 

Мова програмування: Perl

Розмір скрипту лічильника: 5 031 байт

Доступна версія: 1.5.2b від 13.04.2004 р.

Метод встановлення на сторінку: SSI (Server Side Includes) або прозорий малюнок 1х1

Приховування значення у браузері:Для текстового варіанту можливе через атрибути CSS

Використання БД: Ні

Запис Cookie: Ні

Кількість LOG-файлів: 5

Кількість серверів для збору статистики: Необмежена, але впливає на швидкість

Розділи статистики:

  • Дата і час відвідування
  • IP-адреса
  • Сторінка з якої перейшли (HTTP_REFERER)
  • Поточна сторінка
  • Браузер користувача

Як проводились "польові випробування" (тестування)

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

Фрагмент коду

while(1)
 {
 # штучна генерація HTTP_USER_AGENT та HTTP_REFERER

 # Основна частина коду лічильника

 }

На своєму комп'ютері (Celeron 1,2GHz/i815 ASUS TUSL-2/RAM=512... це для любителів статистики) під операційною системою ASP Linux 7.2. (Server), мною було запущенно на паралельне виконання 3 таких скрипта. Для збільшення правдоподібності експерименту скрипти створювали навмання 100 назв різноманітних браузерів та 1000 сторінок-посилань (доречі, оновлювалась лише одна сторінка).

Метою цього експерименту було випробування стійкості коду скрипта при максимальному навантаженні (як під mod_perl).

Результати:

Після безперебійної роботи на протязі 15 хвилин виконання скриптів було припинено (була вже ніч і дуже хотілось спати). Аналіз LOG-файлів показав, що за час виконання скриптів ними було зареєстровано 14 610 оновлень. Розмір головного статистичного файлу при цьому зріс до 260 351 байту. Візуальне спостереження за ходом виконання експерименту дає підставу зробити ще один висновок: при використанні клієнтом вже "відомого" скриптові браузера та сторінки, з якої він потрапив (HTTP_REFERER), швидкість виконання скрипту збільшується (теоретично так і має бути, тому що зменшується кількість файлів, що записуються на диск.

Ну що ж. Майже 1000 користувачів за хвилину (16 кожної секунди), здається це досить втішний результат.

Отримати собі код лічильнику 

Звичайно роботу над лічильником, ще не завершено. Зараз лічильник працює лише на POSIX-сумісних операційних системах (у теперішній редакції він не працює під Win98/95 - flock). Можливо він буде використовувати Cookie (для виявлення постійних користувачів).

Шановний читач, якщо ви зацікавились моїм лічильником, або бажаєте встановити його на власну сторінку - можете завантажити його собі з цього сайту: Завантажити counter.tgz 4,5 кБ

Короткий опис використання лічильнику:

Вміст архіва копіюєте до вашої www-директорії. Запускний файл лічильнуку має назву c.cgi та знаходиться у каталозі /cgi-bin/, для його нормальної роботи потрібен модуль SM_funcs.pm, який Ви також знайдете у архіві. У файлі index.html наведено приклад команди SSI для включення лічильнику до сторінки:

<!--#include virtual="/cgi-bin/c.cgi" -->

або у вигляді прозорого малюнку 1х1 для посилань з інших сайтів:

<IMG Src="http://ВАШ_САЙТ/cgi-bin/c.cgi?tc=hideimage" Alt="" Height=1 Width=1>

Перелік браузерів, які заходили на Ваш сайт знаходяться у файлі /cgi-bin/browsers.dat, всі інші log-файли знаходяться у каталозі /cgi-bin/counter та його підкаталогах. Перед початком використання лічильнику відкорегуйте файл /cgi-bin/hosts.dat та занесіть у нього назву вашого серверу та відповідний підкаталог /cgi-bin/counter. Наприклад, якщо Ваш лічильник буде зберати статистику з 2-х сайтів: http://www.blank.com.ua та http://Counter, то файл hosts.dat повинен містити такі дані:

www.blank.com.ua|blank
counter|main

Що відповідає двом каталогам: /cgi-bin/counter/blank та /cgi-bin/counter/main

У кожному з каталогів повинні бути 4 порожні файли:

l.log - головний файл

l.dat - підсумки загальної кількості по сторінкам

pages.dat - перелік сторінок з лічильником

referers.dat - звідки приходили на сторіку (працює лише у SSI-варіанті)

Важливо! Всі файли повинні мати права доступу на запис від користувача Web-серверу. Це як правило chmod 646 *

Бажаю успіху, а токож буду Вам щиро вдячний за посилання на мій сайт (обмін посиланнями). Для цього Вам достатньо надіслати мені листа і вказати сторінку на який працює мій лічильник чи знаходиться посилання на www.senyk.poltava.ua