Среда, 17.06.2026, 09:21
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

Собственная статистика посещаемости сайта 1
Эта статья о том, как с помощью PHP и MySQL можно организовать сбор статистики посещений вашего сайта. Причем особенностью полученной статистики в результате работы скрипта будет являться то, что вы получите статистику о каждом посетителе в отдельности, узнаете какие страницы он посещал, каким браузером пользовался, сколько провел времени на вашем сайте и многое другое.

Для начала вам нужно создать таблицу в своей базе данных (MySQL), назовем ее, к примеру “counter”, ее структура будет примерно такой:


CREATE TABLE `counter` (
  `
user_id` varchar(64) NOT NULL default '',
  `
url` text NOT NULL,
  `
my_url` text NOT NULL,
  `
pages` text NOT NULL,
  `
date` datetime default NULL,
  `
IP_PORT` varchar(30) NOT NULL default '',
  `
brouser` varchar(100) NOT NULL default '',
 
KEY `user_id` (`user_id`)
)
TYPE=MyISAM;


После создания таблицы непосредственно переходим к написанию самого скрипта, отвечающего за заполнение и отображение собранной информации.
Для начала нам нужно как бы «зарегистрировать» пользователя, для этого можно воспользоваться сессиями:


session_register('user'); // открываем сессию 'user'
if (($_SESSION['user']=="") or ($_SESSION['user']==0)) // Проверяем зарегистрирован пользователь или нет
{
$_SESSION['user']=rand(1,999999999); // Присваиваем id пользователю
}


При использовании данного способа необходимо, что бы скрипт счетчика работал до вывода в браузер пользователя какой-либо информации, или данный кусок кода можно внести в начало главного скрипта, а счетчик include’ить в нужном вам месте.

Теперь пользователь зарегистрирован и нам осталось получить информацию о нем и о страницах которые он посещал. Для этого в PHP предусмотрено множество возможностей:


function getip() // Нужна для надежного определения ip посетителя
{
  if(isset(
$HTTP_SERVER_VARS)) {
    if(isset(
$HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) {
   
$realip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
    }elseif(isset(
$HTTP_SERVER_VARS["HTTP_CLIENT_IP"])) {
      
$realip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
    }else{
      
$realip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
    }
  }else{
  if(
getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
   
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
  }elseif (
getenv( 'HTTP_CLIENT_IP' ) ) {
   
$realip = getenv( 'HTTP_CLIENT_IP' );
  }else {
   
$realip = getenv( 'REMOTE_ADDR' );
  }
}
if((
getenv('REMOTE_PORT'))) {
$realip.=":".getenv('REMOTE_PORT');
}
return
$realip;
}

$brow = getenv("HTTP_USER_AGENT"); // Полное имя браузера
$ref = getenv('HTTP_REFERER'); // Откуда пришел посетитель
$my_urls = getenv('QUERY_STRING'); // Где сейчас находится
$ip=getip(); // Получаем ip


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


$SQL=array(); // Создаем массив с основными параметрами для MySQL и заполняем его
$SQL['host']="localhost";
$SQL['user']="user";
$SQL['db']="db_name";
$SQL['pass']="password";
$SQL['counter']="counter";

$link = mysql_connect($SQL['host'], $SQL['user'], $SQL['pass']) // Соединение с MySQL
   
or die ("Could not connect to MySQL");

mysql_select_db ($SQL['db']) // Выбор базы данных
   
or die ("Could not select database");

$result = mysql_query("SELECT * FROM `".$SQL['counter']."`", $link); // теперь в $result содержится указатель на ответ MySQL
$num_rows = mysql_num_rows($result); // получаем число строк в таблице


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


function searchID($id) // Ищет id пользователя в таблице, по результату этой функции определяем, есть ли для данного пользователя уже созданное поле, или пользователь впервые на вашей странице.
{
global
$SQL;
$result = mysql_query ("SELECT * FROM `".$SQL['counter']."` WHERE `user_id` LIKE '".$id."'")
  or die (
"Query failed");
$num_rows = mysql_num_rows($result);
mysql_free_result($result);
if (
$num_rows>0) return True;
else return
False;
}

function
Update($id,$pages) // Если пользователь уже был на вашем сайте, то просто обновляем информацию о нем.
{
global
$SQL;
$c=count(explode("rn",$pages));
if (
$c<150){
$result = mysql_query ("UPDATE `".$SQL['counter']."` SET `pages` = '".$pages."' WHERE `user_id` = '".$id."'")
  or die (
"Query failed");
return
$result;
}
}

function
IncCounter() // Основная функция скрипта, обновляет или добавляет информацию о посетителе
{
$brow = getenv("HTTP_USER_AGENT"); // Полное имя браузера
$ref = getenv('HTTP_REFERER'); // Откуда пришел посетитель
$my_urls = getenv('QUERY_STRING'); // Где сейчас находится
$ip=getip(); // Получаем ip
global $SQL;
if (
eregi("module=users",$my_urls)==false)
{
if (
searchID($_SESSION['user'])==false)
{
$result = mysql_query ("INSERT INTO `counter` ( `user_id` , `url` , `my_url` , `pages` , `date` , `IP_PORT` , `brouser` ) VALUES ('".$_SESSION['user']."' , '".$ref."' , '".$my_urls."', '".trim($my_urls)."' , NOW( ) , '".$ip."' , '".$brow."');");
}
else
{
$result = mysql_query ("SELECT * FROM `".$SQL['counter']."` WHERE `user_id` LIKE '".$_SESSION['user']."'")
  or die (
"Query failed");
list (
$user_id, $url, $my_url, $pages , $date, $IP_PORT, $brouser) = mysql_fetch_row ($result);
Update($user_id,trim($pages."rn".$my_urls));
}
@
mysql_free_result($result);
}
}



В итоге нам остается добавить всего пару строк и скрипт будет готов:


IncCounter(); // Заполняем таблицу
@mysql_close($link); //Разрываем связь с MySQL




Источник: http://wm-help.net/
Категория: php | Добавил: freeone (03.06.2007) | Автор: Беляев Александр aka gid
Просмотров: 583 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006