Пожалуй, одна из самых сложных, но в то же время обыденных, задач программиста является создание статистики посещений на PHP . В этом материале я покажу, как её можно сделать наиболее качественной.

Статистика посещений на PHP

Пожалуй, одна из самых сложных, но в то же время обыденных, задач программиста является создание статистики посещений на PHP. В этом материале я покажу, как её можно сделать наиболее качественной.

Главная задача статистики посещений - это отличить одного пользователя от другого. Но как это сделать? К сожалению, это вообще невозможно. Если различать по IP, то ничего не выйдет. У огромного числа пользователей он динамический. Более того, у разных людей они повторяются. В итоге, 2 разных IP могут принадлежать одному человеку, а один и тот же IP может принадлежать разным людям.

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

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

  • id - уникальный идентификатор.
  • userhash - cookie пользователя. Данное поле по сути и является ключевым при различении пользователей.
  • ip - IP-адрес пользователя.
  • uri - страница, на которую пришёл посетитель. Например, /page.html.
  • ref - адрес, с которого пришёл посетитель.
  • date - дата посещения.

Теперь разберём PHP-код добавления в эту таблицу новой записи:

<?php
  $userhash = $_COOKIE["userhash"]; // Узнаём, что за пользователь
  if (!$userhash) {
    /* Если это новый пользователь, то добавляем ему cookie, уникальные для него */
    $userhash = uniqid();
    setcookie("userhash", $userhash, 0x6FFFFFFF);
  }
  $ip = ip2long($_SERVER["REMOTE_ADDR"]); // Преобразуем IP в число
  $uri = $_SERVER["REQUEST_URI"]; // Узнаём uri
  $ref = $_SERVER["HTTP_REFERER"]; // Узнаём, откуда пришёл
  $date = time(); // Берём текущее время
  $mysqli = new mysqli("localhost", "root", "", "mydb"); // Соединяемся с базой
  $mysqli->query("INSERT INTO `visits` (`userhash`, `ip`, `uri`, `ref`, `date`) VALUES ('$userhash', '$ip', '$uri', '$ref', '$date')"); // Добавляем запись
  $mysqli->close(); // Закрываем соединение
?>

Безусловно, данный код надо размещать на всех страницах сайта. И так же он может быть и изменён в зависимости от Вашего движка. Также можно добавлять и другие данные, например, браузер пользователя, ОС и прочее.

И, конечно, данная статистика посещений на PHP не идеальна, но не думаю, что есть лучше. А уж идеала точно нет. В любом случае, если Вам нужно отслеживать пользователя на длительном периоде, то лучше как можно быстрее зарегистрировать его на сайте, а уже дальше отслеживать все его действия по полученному id. И вот это уже будет идеальная статистика.