|
|
Ответов: 0
|
25-02-12 07:01
|
|
|
|
Ответов: 0
|
16-01-12 20:13
|
|
|
|
Ответов: 1
|
09-01-12 11:23
|
|
   Web - программирование
|
|
|
   Программирование под ОС
|
|
|
   Web - технологии
|
|
|
   Базы Данных
|
|
|
|
Web - программирование / PHP /
| |
| | |
Возможно вас заинтересует
|
|
Собственная статистика посещаемости сайта
Эта статья о том, как с помощью 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
Но не все так хорошо, как может показаться начинающему программисту, дело в том что данный скрипт будет очень прожорлив, и если вы владелец сайта с большой посещаемостью, то этот скрипт может вызвать существенны прирост поглощаемого трафика.
Для тех, у кого может быть не получилось собрать весть скрипт в кучу, привожу его полный исходный код:
counter.php
<? 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 ( "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 = 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 . "rn" . $my_urls ));
}
@ mysql_free_result ( $result );
}
}
IncCounter ();
@ mysql_close ( $link );
?>
Для вывода статистики вам может понадобиться еще один скрипт:
vizit_info.php
<? 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 ( "rn" , $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 ( "rn" , "<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 ( "%data%" , $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 >% data %</ i ></ span ></ font ></ p > </ td >
</ tr >
</ table >
< table align = center cellpadding = 0 cellspacing = 0 >
< tr >
< td width = 100 height = 15 >
</ td >
</ tr >
</ table >
Последние статьи: Web - программирование / PHP /
| |
| | |
Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее
|
Кол. просмотров: общее - 5587 сегодня - 1
|
|
Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее
|
Кол. просмотров: общее - 5504 сегодня - 1
|
|
Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее
|
Кол. просмотров: общее - 5254 сегодня - 1
|
|
...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее
|
Кол. просмотров: общее - 5305 сегодня - 1
|
|
Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее
|
Кол. просмотров: общее - 5304 сегодня - 1
|
|
|
|