PHP в деталях

       

Миллениум: магия чисел. Счетчик для страницы


DL
25.12.2000

Ожидание нового века всех завораживает! Кто успел, назвал свои проекты "-2000" [] (это с регулярным выражением написано. по-русски - "название-2000" :), кто-то - с приставкой "XXI". На радио (телик уже месяц не смотрю) выходят последние в этом году еженедельные передачи, и ведущие непременно напоминают: следующая передача выйдет в следующем тысячелетии. Магия чисел системы исчисления времени завораживает!

Поэтому сегодня мне тоже хочется поговорить о магии чисел, но другой.

Итак, вы решили, что хватит генерировать трафик [], [] или [] (а сколько еще их развелось!), пора делать собственный счетчик!

Сделаю лирическое отступление для тех, кто все еще считает, что нет ничего лучше значка "Участник Rambler's top 100". Про рекламу и говорить нечего - со страниц рейтингов большой приток посетителей только у тех, кто на первой-второй странице (предполагаю, что вам, как и мне это в ближайшем будущем не светит). А регистрироваться ради зашедших с последних страниц - все равно, что кидать в океан бутылки с бумагой (послания капитана Гранта - и то только через пару лет нашли). Эстетики в пузомерках тоже никакой - что-то инородное посреди страницы болтается (во загнул! :), хотя [] ими не брезгует...

А теперь о главном - скажите-ка, можно ли в вашем счетчике посмотреть статистику по конкретному хосту (когда с него впервые зашли, как часто ходят, на какие страницы)? То-то же! Все сервера статистики держат минимально приемлемые для пользователя цифры. Рамблер - хосты за сегодня и числа за два месяца. eXtreme - последние 20 хостов, числа за 20 дней, 20 недель, 20 месяцев. Естественно, что держать логи чуть ли не всего рунета никому не захочется.

Поэтому мы будем писать их сами.

Что мы знаем про пользователя, зашедшего на сайт?

ip-адрес ($REMOTE_ADDR)

броузер ($HTTP_USER_AGENT)

адрес, откуда он пришел ($HTTP_REFERER) *если он не запретил рефереры при помощи, например, atguard.

адрес запрошенной страницы ($REQUEST_URI)




Подробнее о заранее определенных в PHP переменных - см. в [].

К данному списку можно добавить, разумеется, дату-время лога и текстовый адрес пользователя (например p123.bass4.sinor.ru вместо 123.4.56.78). Последний можно получить через функцию []:

$REMOTE_TXT_ADDR = gethostbyaddr($REMOTE_ADDR);

Хранить логи надо в базе данных (не лучше всего, а надо, иначе выяснить из них что-то полезное будет очень трудно). Благо, сейчас на нормальных хостингах стоит базовый набор PHP+MySQL. У меня на этом сайте логи пишутся одной строкой в конце каждого доступного пользователю файла (их всего 5).

@mysql_query("INSERT INTO log (date, ip, host, browser, address, referer) VALUES (NOW(), '$REMOTE_ADDR', '". gethostbyaddr($REMOTE_ADDR). "', '$HTTP_USER_AGENT', '$REQUEST_URI', '$HTTP_REFERER')");

"Собачка" перед командой - для того, чтобы пользователь не получал ругательств сервера по поводу данной команды (одна из особенностей PHP4). А зачем ругаться? :) Это только наша проблема - логи, пользователь пусть смотрит содержимое страницы спокойно, может быть, довольный, зайдет на сайт снова и снова.

Но вернемся к счетчику. Еще одной полезной вещью является подсчет уходов пользователя на другие сайты. Тем, кто работает с шаблонами, проще: перед выводом страницы делать примерно следующее:

$page = str_replace("<a href=http://", "<a href=http://", $page);

А в файле jump.phtml написать следующее:

if (strlen(ereg_replace("[^0-9a-zA-Z]", "", $url))>0) {

// здесь должна была быть связь с базой данных

  // вставка строки в таблицу логов

  @mysql_query("INSERT INTO log (date, ip, host, browser, referer, url, jump) VALUES (NOW(), '$REMOTE_ADDR', '". gethostbyaddr($REMOTE_ADDR). "', '$HTTP_USER_AGENT', '$HTTP_REFERER', '$REQUEST_URI', '". addslashes($url). "')");

  header ("Location: http://$url");

  }

else

  header ("Location: http://АДРЕС_НАШЕГО_САЙТА");

В моей таблице логов есть поле jump - адрес, куда пользователь уходит.

Механизм просмотра статистики - самое сложное место в данной схеме (впрочем, как и во всех остальных) - можно писать самому, а можно писать запросы на выборку в или терминалке. Ваша фантазия здесь неограничена :).

Кстати, посмотрев логи своего сайта, я убедился, что ставить ссылки на другие ресурсы вовсе не вредно, а даже полезно. Слова мои имеют больший вес, а пользователь, если ему интересно все равно вернется. И открывать ссылки в новом окне вовсе не обязательно - если надо, посетитель нажмет Shift и сам откроет в новом окне, а если нет, то зачем его удерживать?

Но это все мое ворчание. Главное, что статистику вашего сайта теперь можно будет сделать именно такой, какая вам нужна.


Содержание раздела