<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

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

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

Подписавшись по 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); } ошибки нету но и в БД не чего не изменилось, Михаил, можете объяснить почему так?

Ответить

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