просмотров:6491 | комметариев: 1
Прикручиваем статистику к сайту. Класс сбора статистики на PHP и MySql.

Сегодня напишем класс, который будет фиксировать количество посещений вашего сайта, а именно, кто, когда и откуда пришел на ваш сайт. Согласитесь это всегда интересно знать. Существует множество сервисов во всемирной паутине которые предоставляют подобную инфу. Первое, что приходит на ум это Google Analytics. Конечно, по возможностям Гуля монстра наш сервис будет мал-мал уступать :), но зато будет свой, написанный своими руками сервис, с возможностью последующей доработки. А это лучше чем чужой продукт. Ну это мое мнение, а Вы решайте сами… Сразу оговорюсь, что пример будет самый элементарный, для новичков. В конце статьи будут даны рекомендации по улучшению функционала нашего сервиса. Считаю, главное указать нужное направление, как можно доступнее объяснить принцип действия системы, а как усложнить сервис, расширить функционал, то уже понятливый чел сам докумекает.

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


$_SERVER[“REMOTE_ADDR”] – здесь ip, того кто посетил ваш сайт. Для лучшего запоминания, перевожу REMOTE - дистанционный, удаленный, ADDR – сокращенное от address.

$_SERVER[“HTTP_REFERER”] - здесь ссылка по которой посетили ваш сайт(REFER – переводится – направлять, отсылать). Обязательное условие при котором значение не будет пустой строкой - переход должен осуществляться по ссылке.

$_SERVER[“HTTP_USER_AGENT”] - операционная система пользователя
Приступим к реализации задуманного.

1. Создадим таблицу в которой и будем это добро хранить, назовем ее просто - stat. Этот запрос нужно выполнить в phpmyadmin(если кому не ясно ;) ). Просто скопируйте запрос, что ниже и вставьте его в поле вкладки SQL в бд вашего сайта и нажмите кнопку ОК. Сам запрос:

CREATE TABLE IF NOT EXISTS `stat` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `page` varchar(50) NOT NULL, /* имя или id странички сайта */ `user_ip` varchar(15) NOT NULL, /* IP пользователя */ `referer` varchar(255) NOT NULL, /* ссылка по которой пришел пользователь */ `os` varchar(255) NOT NULL, /* операционная система пользователя */ `date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,/* дата записи в таблицу */ PRIMARY KEY (`id`,`page`) )

2. Пишем класс, который будет уметь записывать данные по статистике в таблицу и считывать их.
Для записи данных есть метод addStatPage. На вход подаем два параметра – первый – имя странички, второй – массив $_SERVER. Откуда взять имя странички – это решать вам. Или из адресной строки, или, возможно вы инклудите содержание некоторых файлов на основной странице, тогда оттуда берите. В любом случае можете прописать статическое имя, например index, тогда будет просто статистика посещений всего сайта, без возможности просмотра количества посещений каждой из страничек.
Само собой должно быть настроено и открыто подключение к БД, иначе записать данные в таблицу не выйдет.
Сам класс:

/** * Stat * * @author Gubarev Mihail * @copyright Copyright (c) 2012 Gubarev Mihail. (http://devel.comeze.com/) * @version 1.0 * @filesource */ class Stat { /** * Записывает данные в таблицу статистики * * @param string $page имя странички * @param array $server массив $_SERVER * @return boolean */ public function addStatPage($page, array $server) { if (!empty($page)) { $sql = "INSERT INTO `stat` SET `page` = '" . addslashes($page) . "', `referer` = '" . addslashes(!empty($server["HTTP_REFERER"]) ? $server["HTTP_REFERER"] : '') . "', `user_ip` = '" . addslashes($server["REMOTE_ADDR"]) . "', `os` = '" . addslashes($server["HTTP_USER_AGENT"]) . "' "; return mysql_query($sql) or die('Bad database query. <pre>' . $sql . '</pre><br />Error: ' . mysql_error()); } return false; } /** * Считывает данные из таблицы статистики * * @param integer $limit кол-во записей * @param integer $quantity номер позиции * @param string $order_by сортировка * @return array */ public function getStat($limit, $quantity = 0, $order_by = 'date_create DESC') { $sql = 'SELECT `id`, `page`, `user_ip`, `referer`, `os`, `date_create` FROM `stat` '; $sql .= 'ORDER BY ' . addslashes($order_by); $sql .= ' LIMIT ' . (int) $limit; $sql .= ( empty($quantity)) ? : (', ' . (int) $quantity); $q = mysql_query($sql) or die('Bad database query. <pre>' . $sql . '</pre><br />Error: ' . mysql_error()); $i = 0; $result = array(); if (!empty($q)) { while ($row = mysql_fetch_assoc($q)) { $result[$i++] = $row; } } return $result; } }

Собственно и все, теперь достаточно создать экземпляр класса в нужном месте вашего сценария, вызвать нужный метод, и будет вам счастье :).

Пример использования:

require_once 'Stat.php'; // подключаем файл с классом $stat = new Stat(); // создаем экземпляр класса $stat->addStatPage('index', $_SERVER); // записываем статистику, // вместо index - передайте имя вашей странички

3. Считываем статистику.
Накопленные данные нужно еще и отображать. Для чтения данных есть метод getStat.
На вход подаются 3 параметра:
1 - обязательный параметр - кол-во записей которой вернет запрос, т.к. таких может быть очень много.
2 - запись(позиция) с которой будет идти выборка(для возможной постраничной навигации)
3 - сортировка по какому полю(по умолчанию, отсортировано по дате создания, по убыванию)

На выходе метод отдает массив данных, который потом можно вывести там где вам нужно, в нужной вам форме ;)

$stat->getStat(100); // последние 100 записей $stat->getStat(100, 100); // 100 записей, начиная с сотой $stat->getStat(100, 0, 'page, date_create') // послендие 100 записей //отсортированы по имени страницы и дате

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

Класс можно дополнить методами выборки информации по отдельной странице, по IP, по определенной дате. Также можно написать методы которые возвращают общее кол-во записей по странице и тп. Все эти задачи достаточно просты и тривиальны, поэтому не буду загромождать класс лишним кодом. Допишите сами. Статья ориентирована на зелененьких программистов, вот будет причина для прокачки скилов ))) Если, что-то не ясно, велкам постите в комментах, чем смогу помогу.

Скачать архив с классом и запросом на создание таблицы
Все. Разрешите откланяться. Будьте здоровы. Автор Губарев Михаил.
просмотров:6491 | комметариев: 1
MrJenika
21 августа 2010, 00:24
побольше бы практичных php примеров, а то в интернете одна теория и примеры которые никуда и не прикрутить.
просмотров:6491 | комметариев: 1

Оставить комментарий:    

Ваше имя:
 
Текст комментария:
 
+ 1 =