Вход
 
Главная Форум Каталог веб-мастеров Регистрация SEO библиотека
Разделы сайта
Поиск по сайту
Почта @admin-club.ru
Логин:
Пароль:
· завести почту
Новое
В картинках
см. так же графику
А так же
За малые деньги рукав высокого давления предлагаем всем желающим. · аренда офиса прямая · За небольшую оплату spaces зона на лучших условиях.
 
Пишем статистику для сайта на PHP 8 ноября 2010
 - FAQ » PHP
Многие виды статистики, достпные в интернете крайне не стабильны и обладают скучным функционалом. Мы напишем на PHP свой мониторинг, чтобы иметь все данные на руках.


Для начала сделаем запрос к БД:
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 пользователю
}



Итак, пользователя зарегистрировали. Теперь нужно достать нужные данные: какие страницы он посещал, его ip адрес и другие. Для это пишем следующий код:
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

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

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

[b]counter.php[/b]
[code]$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");

//&#216;&#224;&#225;&#235;&#238;&#237;
$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)."<hr><br>....<br><br><hr>";
$pages_e=substr($pages, -100, -1);
$pages=$pages_s.$pages_e;
}
$pages=str_replace("\r\n","<hr>",$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("Ъta%",$date,$tmp);
$tmp=str_replace("%brouser%",$brouser,$tmp);
$tmp=str_replace("%col_vo%",$c,$tmp);
echo $tmp;
}

mysql_close($link);

?>


Пора настроить шаблон вывода статистики:

shabl.htm
<table style="border-collapse:collapse; font-family: verdana,tahoma,arial; font-size: 9pt; color: #404479;" align=center cellspacing=0 width=95%>
<tr>
<td width="99%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#6D6D8F" colspan="2">
<p><font color="#F4F4FC" face="Arial"><i><b>ID посетителя:&nbsp;</b></i>%user_id%
            (<b>%user_ip%</b>)</font></p> </td>
</tr>
<tr>
<td width="50%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#F4F4FF" valign=top>
<p align="center"><i><b>Откуда</b></i></p>
</td>
<td width="50%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#F4F4FF" valign=top>
            <p align="center"><i><b>Куда</b></i></p>
</td>
</tr>
<tr>
<td width="50%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#F7F7FF" valign=top>
            <p>%from%</p>
</td>
<td width="50%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#F7F7FF" valign=top>
            <p>%my_pages%</p>
</td>
</tr>
<tr>
<td width="99%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#E6E6FC" colspan="2">
            <p align="center"><b><i>Посещенные страницы</i></b></p>
</td>
</tr>
<tr>
<td width="99%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#F4F4FF" colspan="2" valign="top">
            <p>%vizit_pages%</p>
</td>
</tr>
<tr>
<td width="99%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#E6E6FC" colspan="2" valign="top">
            <p align="center"><b><i>Браузер</i></b></p>
</td>
</tr>
<tr>
<td width="99%" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#F4F4FF" colspan="2" valign="top">
            <p>%brouser%</p>
</td>
</tr>
<tr>
<td width="356" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#E6E6FC">
<p align=right>Кол-во страниц:<b>%col_vo%</b></p> </td>
<td width="358" style="border-width:1; border-color:b_color; border-style:solid;" bgcolor="#E6E6FC">
<p align=right><font face="Arial" color="#339900"><span style="font-size:8pt;"><i>Дата посещения:
</i></span></font><font face="Arial" color="#336600"><span style="font-size:8pt;"><i>Ъta%</i></span></font></p> </td>
</tr>
</table>
<table align=center cellpadding=0 cellspacing=0>
<tr>
<td width=100 height=15>
</td>
</tr>
</table>
 - coolplayer  - 1929  - 1  - Распечатать
se007:
Прошу прощения за такой вопрос, я в PHP не силен, можно уточнить куда прописывать эти коды ?
С БД и тут (vizit_info.php
shabl.htm) все ясно, на сколько я понял название файла "counter.php"
а куда его поместить ? в корень ?

11 августа 2011 23:25
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
© 2007-2011
«Клуб Админов»

Обратная связь
support@admin-club.ru

Разделы Категории Инфо Публикации
Новости Статьи О сайте Облочко Регистрация
Форум Скрипты Статистика Комментарии Вход
Почта Загрузки Реклама Артикус Пароль
Докс CMS's Правила
СЕО Шаблоны
Дизайн сайта www.artoflogic.ru Rambler's Top100