<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Статистика посещений на 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. И вот это уже будет идеальная статистика.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (23):

malina95 malina95 04.02.2013 13:29:19

А так и нужно чтобы при каждом переходе по ссылкам на сайте появлялась новая запись, или нет?

Ответить

Admin Admin 04.02.2013 13:38:21

Да, так и нужно.

Ответить

malina95 malina95 04.02.2013 13:41:24

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

Ответить

Admin Admin 04.02.2013 13:48:33

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

Ответить

malina95 malina95 04.02.2013 13:50:18

Ясно

Ответить

shtyrmlord shtyrmlord 04.02.2013 13:52:31

Отлично,надо бы "похимичить" с этим кодом.

Ответить

malina95 malina95 04.02.2013 18:57:33

Михаил, а можете сделать статью про создание графиков статистики по дате или количеству без сторонних библиотек, в виде дополнения к статье? Я очень прошу, просьба размером с голубого кита...

Ответить

Admin Admin 04.02.2013 20:49:42

Расскажу о создании графиков в PHP на основе данных, но это будет через 2-3 недели.

Ответить

malina95 malina95 04.02.2013 20:54:57

Большое спасибо, будем с нетерпением ждать этой статьи, всё мы точно будет рады... Огромное спасибо, а когда будет статья про спойлер на js? Я вас просил написать и до сих пор жду

Ответить

Admin Admin 04.02.2013 20:56:12

http://myrusakov.ru/skrytyj-tekst-javascript.html

Ответить

ankalitkin ankalitkin 05.02.2013 19:23:01

Исправьте там где userhash - cookie резлечение на различение

Ответить

Admin Admin 05.02.2013 20:45:00

Спасибо, исправил!

Ответить

tolia2012 tolia2012 12.03.2013 13:02:14

привет,михаил, как сделать на сайте счетчик просмотров,загрузок,рейтинг,к какому нибудь определенному продукту или файлу.точнее где взять такой скрипт или скрипты?спасибо.

Ответить

Admin Admin 12.03.2013 16:42:23

Где взять - не знаю, не использую их.

Ответить

AntDant AntDant 21.03.2013 13:25:08

Локальный сервер работает, все а скрипт не хочит работать выдает ошибки, Я пока в MySQL не очень вчем дело?

Ответить

Admin Admin 21.03.2013 13:34:14

Поэтому сначала изучайте MySQL.

Ответить

AntDant AntDant 21.03.2013 14:00:49

Хорошо спасибо =)

Ответить

sligor sligor 05.09.2013 20:20:35

Доброго времени суток, Михаил. Подскажите, пожалуйста, как значение в поле ip представить в обычном для этого поля виде. Т.е. у меня отображается девяти- или десятизначное число, а хотелось бы видеть обычный формат ip-адреса. Спасибо

Ответить

Admin Admin 05.09.2013 21:52:44

Вероятно Вы про функцию ip2long(). Тогда просто не используйте её.

Ответить

Alex_Cortez Alex_Cortez 23.12.2013 22:54:37

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

Ответить

tikkiwiki tikkiwiki 24.12.2013 10:33:32

Виталий, для определения онлайн пользователя их и используют, только по закрытию браузера, а не через определенное время они удаляются.

Ответить

asler asler 23.02.2016 19:55:31

Всем привет, Михаил, подскажите пожалуйста, не могу сам сообразить. Как возможно отсортировать записи по полю userhash ? Меня вполне устраивает этот счетчик, но с "опрятным" выводом чет мучаюсь. Добавил чистку через 30 дней, если кому надо. $days='30'; $date=date('Y-m-d H:i:s'); $del_date = new DateTime($date); $del_date->modify("+".$days." day"); $del_date=$del_date->format('Y-m-d H:i:s'); $userhash = $_COOKIE["userhash"]; if (!$userhash) { $userhash = uniqid(); setcookie("userhash", $userhash, 0x6FFFFFFF); } $ip = ip2long($_SERVER["REMOTE_ADDR"]); $uri = $_SERVER["REQUEST_URI"]; $ref = $_SERVER["HTTP_REFERER"]; mysql_query("INSERT INTO visits (userhash,ip,uri,ref,date,del) VALUES ('$userhash', '$ip', '$uri', '$ref', '$date', '$del_date')",$db); mysql_query ("DELETE FROM visits WHERE del < NOW()");

Ответить

0-990 0-990 08.07.2016 18:13:18

Всем привет, у меня ошибка в 6 строчке кода. Заменил на <?php if(isset($_COOKIE['userhash'])) { $userhash = $_COOKIE['userhash']; // Узнаём, что за пользователь } if (isset($userhash)) { /* Если это новый пользователь, то добавляем ему cookie, уникальные для него */ $userhash = uniqid(); setcookie('userhash', $userhash, 0x6FFFFFFF); } ошибки нету но и в БД не чего не изменилось, Михаил, можете объяснить почему так?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.