• Регистриция
Этап применения умений и навыков.
Плохой специалист винит не себя, а инструменты, которыми он пользуется. Поэтому убедитесь в том, что ваше прог...
Этап финальной доводки.
Именно внимание к деталям отличает хорошую работу от великолепной. Вот несколько советов как «добавить изюм...
Фиксированный размер шрифта на Ваших веб-страничках
Вы когда нибудь задумывались о том, как выглядят ваши веб-странички на других компьютерах? Наверняка задумыв...
Этап финальной доводки.
Именно внимание к деталям отличает хорошую работу от великолепной. Вот несколько советов как «добавить изюм...
Секреты индексации сайта. Сайт может и должен работать. Пример №2
Звонит скептически настроенный знакомый и рассказывает "ужасную" историю. Сфера деятельности - бытовая элект...
При создании дизайна для Сети вам нужно принять к сведению, что контент будет меняться. О том, чтобы тратить в...
Плохой специалист винит не себя, а инструменты, которыми он пользуется. Поэтому убедитесь в том, что ваше прог...
Собственная статистика посещаемости сайта

Эта статья о том, как с помощью 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("\r\n",$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."\r\n".$my_urls));
}
@mysql_free_result($result);
}
}
В итоге нам остается добавить всего пару строк и скрипт будет готов:

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

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

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

counter.php

$SQL=array();
$SQL['host']="localhost";
$SQL['user']="user";
$SQL['db']="db_name";
$SQL['pass']="password";
$SQL['counter']="counter";

session_register('user'); // открываем сессию 'user'
if (($_SESSION['user']=="") or ($_SESSION['user']==0))
{
$_SESSION['user']=rand(1,999999999);
}

$link = mysql_connect($SQL['host'], $SQL['user'], $SQL['pass'])
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);
$num_rows = mysql_num_rows($result);

function searchID($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("\r\n",$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 = brow_type(true);
$ref = getenv('HTTP_REFERER');
$my_urls = getenv('QUERY_STRING');
$ip=getip();
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."\r\n".$my_urls));
}
@mysql_free_result($result);
}
}

IncCounter();
@mysql_close($link);
?>

Для вывода статистики вам может понадобиться еще один скрипт:

vizit_info.php
$link = mysql_connect($SQL['host'], $SQL['user'], $SQL['pass'])
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);
$num_rows = mysql_num_rows($result);


$result = mysql_query ("SELECT * FROM ".$SQL['counter']." ORDER BY `date` DESC LIMIT 0 , ".$num_rows." ")
or die ("Query failed");

//Øàáëîí
$shabl=Remote_file_read(“shabl.htm”); // шаблон


while (list ($user_id, $url, $my_url, $pages , $date, $IP_PORT, $brouser) = mysql_fetch_row ($result))
{
$c=count(explode("\r\n",$pages));
if ($c>15)
{
$pages_s=substr($pages, 0, 256)."



....


";
$pages_e=substr($pages, -100, -1);
$pages=$pages_s.$pages_e;
}
$pages=str_replace("\r\n","
",$pages);
$tmp=str_replace("%user_id%",$user_id,$shabl);
$tmp=str_replace("%user_ip%",$IP_PORT,$tmp);
$tmp=str_replace("%from%",$url,$tmp);
$tmp=str_replace("%my_pages%",$my_url,$tmp);
$tmp=str_replace("%vizit_pages%",$pages,$tmp);
$tmp=str_replace("%data%",$date,$tmp);
$tmp=str_replace("%brouser%",$brouser,$tmp);
$tmp=str_replace("%col_vo%",$c,$tmp);
echo $tmp;
}

mysql_close($link);

?>

shabl.htm





























ID посетителя: %user_id%
(%user_ip%)


Откуда



Куда



%from%



%my_pages%



Посещенные страницы



%vizit_pages%



Браузер



%brouser%



Кол-во страниц:%col_vo%


Дата посещения:
%data%










Если у вас есть вопросы или дополнения, или вы просто с чем-то не согласны пишите мне на

 

Популярное

  • PHP. Пишем счетчик просмотров для каждой страницы сайта на php
    На некоторых сайтах часто можно увидеть следующую надпись внизу страницы или под статьями: "Всего просмотров xxx. Сегодня xx". На первый взгляд ничего примечательного...
    Пишем 'гостевую книгу' с нуля на php
    Почти на каждом более-менее популярном сайте есть форум или гостевая книга, эти элементы нужны для постоянного общения автора сайта с его пользователями. Но многие...
    Окна сообщений
    Хотя всплывающие окна это и очень эффективный метод получения новых подписчиков, есть один еще более успешный. Сочетая его с хорошим стимулом, вы в буквальном смыс...
    Собственная статистика поисковых слов (Яндекс, Рамблер, Google,...) на PHP
    В этой статья я бы хотел поделиться с вами своей новой разработкой – анализатором поисковых запросов с популярных поисковых систем, посмотреть, что это такое, и ка...
    Гостевая книга на PHP.
    В этой статье рассказывается о том, как создать гостевую книгу, описывается её структура и реализация. За пределами статьи остаются дизайн, вёрстка, оформление и т....
  • Организация CSS-файлов: Совет 1 - Флаги
    CSS Organization Tip 1: FlagsВам приходилось писать и работать с большими CSS-файлами? Мучались с бесконечным скроллингом вверх-вниз в поисках нужной части кода? CSS-файлы, с котор...
    Частые ошибки в веб-дизайне.
    Разметка текста – одна из самых важных характеристик дизайна. В большей части проектов текст доминирует, так что хорошо подобранные шрифты могут стать ключом к ра...
    Компот и мухи веб-разработки
    Русский интернет (уже наконец) вовсю осваивает “дизайн через CSS”, но многие все равно не понимают, почему именно надо дизайнить так, а не по-старому, через таблицы. Р...
    Создаем веб-дизайн на тему комиксов, Photoshop и HTML+CSS
    Давайте начнем! Для быстроты изложения я опущу объяснение основ (вроде того, как создать слой-маску или отредактировать обработчики или векторную фигуру). Вам нужн...
    HTML 4 не является языком оформления веб-страниц.
    Он является языком логической разметки страниц. Раньше, создавая HTML-документ, вы думали о том, что этот заголовок будет сделан жирной верданой золотистого цвета и о...
  • Немного о PHP.
    Интернет уже давно прочно вошел в нашу жизнь. Это смелое утверждение можно доказывать или опровергать много раз, но так или иначе все меняется, а с этим спорить никт...
    Основы написания PHP программ
    Как и в любом языке программирования в PHP есть свои правила, константы, зарезервированные слова и операторы, с помощью которых выполняются различные манипуляции с ...
    История РНР
    Начинать нужно всегда с самого простого, и сейчас я попробую познакомить Вас с программированием на скриптовом языке РНР. РНР (читается как пи-эйч-пи) появился на св...
    Особенности РНР
    Как и у всякого языка программирования, у РНР есть свой синтаксис. Он очень похож на синтаксис языка С или Perl. Программисты, пишущие на этих языках, смогут освоить РН...
    Введение в PHP
    PHP - это скриптовый язык программирования, который исполняет весь свой код на стороне сервера, а клиенту выдается только результат работы скрипта. Изначально PHP рас...

Теги

Календарь

< Ноябрь 2011 >
П В С Ч П С В
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 30        

Наши фото

Укажите свое мастерство









 

Обрати внимание

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

На заметку

Твой сайт
Изготовление сайта - штука тяжёлая и занимает кучу времени. Так что длительность прогулок под Луной с любимой девушкой, а для кого и с любимым бойфрендом, придется с...
JavaScript: очистка формы
Для очистки формы существует специальная кнопка Reset, при нажатии на которую данные формы возвращаются в исходное значение. Если ввести свои данные в форму, а затем ...