Плагиатим SpyLog Никита Кислицин Xakep, номер #066, стр. 066-116-1 (nikitoz@real.xakep.ru, www.ired.ru) Пишем систему сбора статистики Сбор информации о посетителях сайта – актуальная задача для любого веб-мастера. Всегда интересно знать, сколько человек зашли на твой сайт, какую информацию они здесь искали, откуда пришли и каким софтом пользуются. В Сети очень много сервисов, которые бесплатно предоставляют счетчики для сбора такой статистики, но расширенные функции обычно доступны только за деньги. А ведь написать подобный счетчик не так уж и сложно. За примерами далеко ходить не надо. Популярный сервис SpyLog предоставляет возможность бесплатно пользоваться их системой, установив у себя счетчик – однако для просмотра подробной статистики пользователю предлагают заплатить деньги и перейти на другой тарифный план, после чего ему откроются новые перспективы. Такое положение вещей не может устраивать, особенно учитывая тот факт, что мы с тобой и сами программисты хоть куда :). Сегодня мы напишем систему сбора статистики, которая будет вести учет посещаемости, статистику по используемым операционным системам, браузерам и графическим режимам. Все это, оказывается, не так сложно реализовать, используя стандартные средства JavaScript и один из языков для написания серверного приложения, обрабатывающего данные – мы по привычке воспользуемся PHP. Делай раз Систему можно условно разделить на две части – ту, что производит сбор и запись в базу данных информации о посетителях сайта, и ту, что показывает администратору ресурса собранную статистику, формируя красивые диаграммы и графики. Прежде всего необходимо разобраться с тем, каким образом мы будем получать информацию о пользователе. Самое простое и эффективное решение – передавать сведения о посетителе в качестве параметров к вызываемому со страницы сценарию. Каким же образом мы будем выполнять приложение при каждом обращении к странице сайта? Лучше всего это делать так. Получая при помощи JavaScript сведения о посетителе, мы, используя тег <IMG>, будем вставлять в документ картинку, адрес которой имеет следующий вид: URL_скрипта?width=ширина_экрана&height=высота_экрана. Таким образом, на сервер передаются сведения о посетителе – скрипту остается только записать информацию в базу данных, при помощи библиотеки GD сформировать изображение и передать его браузеру. При этом можно использовать как красивые полноразмерные картинки, так и невидимые “блохи” размером 1х1 – это я оставлю на твое усмотрение. Но если возиться с формированием графики не хочется, можно воспользоваться тегом <iframe> вместо <img> - это позволит вставить в страницу невидимый фрейм и решит проблему неучтенных пользователей, которые сняли в настройках браузера галочку с пункта “отображать рисунки” (ведь в этом случае наша картинка не будет загружена, и, соответственно, посещение не будет засчитано!). Настало время разобраться, каким образом можно получить сведения о системе пользователя. Что касается графического режима, тут все просто. Реализация JavaScript в Internet Explorer’е имеет множество переменных окружения – так, например, объект screen имеет свойства width, height и colorDepth – это ширина, высота экрана (в пикселах) и глубина цвета соответственно. В Netscape все несколько иначе, но тоже очень легко – см. код счетчика. Что же касается браузера и системы, то тут есть два пути. Первый – использовать переменную окружения сервера $HTTP_USER_AGENT, второй – извлечь интересующую информацию из свойства navigator.appName. По ряду причин предпочтительнее использовать первый вариант – если юзер использует текстовый браузер а-ля lynx, сценарий JavaScript не сможет выполниться, и мы не получим интересующие нас сведения. В то же время $HTTP_USER_AGENT позволит вполне корректно распознать систему и используемый посетителем браузер. Теперь давай напишем простенький код счетчика на JavaScript, который будет размещаться на каждой странице сайта: |