WEB-интерфейс для просмотра статистики интернета


Автор: lissyara.

В предыдущей статье было рассмотрено, как запихнуть траффик собранный trafd в базу данных MySQL. Также был предложен "способ" подсчёта - запросами из консоли :) Нижеприведённый скрипт - это всего лишь "человеческое лицо" к тому самому запросу. И всё :)

<?php

// IP хостов, интерфейсы,

$ip_out_servera = "222.222.222.222"; // внешний IP сервака

$ip_internal_servera = "192.168.0.254"; // внутренний IP сервака

$IF_out_servera = "fxp0"; // название внешнего интерфейса сервака

$IF_internal_servera = "sis0"; // название внутреннего интерфейса сервака

$lan_mask = "192.168."; // маска по которой выбираются IP для подсчёта

//Пароли для подключения к MySQL

$db_host = "localhost";

$db_user = "trafd";

$db_passwd = "trafd";

$db_db = "trafd";

//Пытаемся приконнектится к БД

if(!mysql_connect($db_host,$db_user,$db_passwd))

{

echo "<br><br><BIG><CENTER>

Не могу прислюнявиться к MySQL-серванту!</CENTER></BIG>";

exit;

}

//Выбираем базу данных

mysql_select_db($db_db);

// определяем текущий месяц, и прошлый месяц - для вывода статистики

$curr_month = date(Y,time()) . "-" . date(m,time());

$old_month = date(Y,time()) . "-" . date('m',strtotime("-1 month"));

// строим HTML страничку:

?>

<HEAD>

<title>Страница статистики</title>

<meta http-equiv="Content-Type"

content="text/html; charset=windows-1251">

<STYLE type="text/css">

#main_table .hilightoff {BACKGROUND: white}

#main_table .hilighton {BACKGROUND: #ccbbff}

#cheresstrochnaya_table .hilightoff {BACKGROUND: #88ff88}

#cheresstrochnaya_table .hilighton {BACKGROUND: #ccbbff}

</STYLE>

<BODY>

<BIG><CENTER>СТАТИСТИКА ИНТЕРНЕТА</CENTER></BIG><br><br>

<TABLE border="0" cellspacing="0" cellpadding="0" width="100%">

<TBODY>

<TR>

<TD width="50%" align="center" valign="top">

<TABLE border="1" cellspacing="0" cellpadding="0"

width="80%" id="main_table">

<TBODY>

<TR>

<TD height="20" align="center" colspan="3">

<BIG><CENTER>статистика за текущий месяц

<?php echo $curr_month; ?></CENTER></BIG></TD>

</TR>

<TR>

<TD height="20" width="15%" align="center">

<b>IP - адрес</b></TD>

<TD height="20" width="55%" align="center">

<b>пользователь</b></TD>

<TD height="20" width="30%" align="center">

<b>сколько скачано мегабайт</b></TD>

</TR>

<?php

// вытаскиваем статистику по пользователям из БД

$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM

`" . $IF_internal_servera . "_" . date(Y,time()) . "` WHERE `date`

LIKE '" . $curr_month . "-%' AND from_IP != '" . $ip_out_servera . "'

AND to_IP != '" . $ip_out_servera . "' AND

`to_IP` != '" . $ip_internal_servera . "'

AND `from_IP` != '" . $ip_internal_servera . "' AND `to_IP`

LIKE '" . $lan_mask . "%' GROUP BY `to_IP` ORDER BY `bytes` DESC");

// Строим табличку по тем кого достали

// вытаскиваем рейтинг страниц из БД

while ($d = mysql_fetch_assoc($sql)) {

// собственно тут вывод результатов.

$bytes = $d['bytes'] /1048576;

$bytes = round($bytes, 2);

if($d['to_IP'] == '192.168.0.21'){$user_name = 'Петров Ф. А.';}

if($d['to_IP'] == '192.168.0.17'){$user_name = 'Сидоров Н. А.';}

if($d['to_IP'] == '192.168.0.13'){$user_name = 'Иванов А.Л.';}

?>

<tr class=hilightoff onmouseover="className='hilighton';"

onmouseout="className='hilightoff';">

<td style="border-bottom: 1px solid #707680;"

width="" align="left"><?php echo $d['to_IP']; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="left"><?php echo $user_name; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="center"><?php echo $bytes; ?></td>

</tr>

<?php

unset ($user_name);

}

?>

</TBODY>

</TABLE>

</TD>

<TD width="50%" align="center" valign="top">

<TABLE border="1" cellspacing="0" cellpadding="0"

width="80%" id="main_table">

<TBODY>

<TR>

<TD height="20" align="center" colspan="3">

<BIG><CENTER>статистика за прошлый месяц

<?php echo $old_month; ?></CENTER></BIG></TD>

</TR>

<TR>

<TD height="20" width="25%" align="center">

<b>IP - адрес</b></TD>

<TD height="20" width="55%" align="center">

<b>пользователь</b></TD>

<TD height="20" width="30%" align="center">

<b>сколько мегабайт</b></TD>

</TR>

<?php

// вытаскиваем статистику по пользователям из БД

$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM

`" . $IF_internal_servera . "_" . date(Y,time()) . "` WHERE `date`

LIKE '" . $old_month . "-%' AND from_IP != '" . $ip_out_servera . "' AND

to_IP != '" . $ip_out_servera . "' AND `to_IP` != '" . $ip_internal_servera . "'

AND `from_IP` != '" . $ip_internal_servera . "' AND `to_IP` LIKE

'" . $lan_mask . "%' GROUP BY `to_IP` ORDER BY `bytes` DESC");

// Строим табличку по тем кого достали

// вытаскиваем рейтинг страниц из БД

while ($d = mysql_fetch_assoc($sql)) {

// собственно тут вывод результатов.

$bytes = $d['bytes'] /1048576;

$bytes = round($bytes, 2);

if($d['to_IP'] == '192.168.0.21'){$user_name = 'Петров Ф. А.';}

if($d['to_IP'] == '192.168.0.17'){$user_name = 'Сидоров Н. А.';}

if($d['to_IP'] == '192.168.0.13'){$user_name = 'Иванов А.Л.';}

?>

<tr class=hilightoff onmouseover="className='hilighton';"

onmouseout="className='hilightoff';">

<td style="border-bottom: 1px solid #707680;"

width="" align="left"><?php echo $d['to_IP']; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="left"><?php echo $user_name; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="center"><?php echo $bytes; ?></td>

</tr>

<?php

unset ($user_name);

}

?>



</TBODY>

</TABLE>



</TD>

</TR>

</TBODY>

</TABLE>

<br><br>



<?php

// считаем траффик этого месяца

$traffic_curr_month = mysql_fetch_array(mysql_query("SELECT SUM(bytes) AS `bytes`

FROM `" . $IF_out_servera . "_" . date(Y,time()) . "`

WHERE `to_IP` ='" . $ip_out_servera . "' AND `date`

LIKE '" . $curr_month . "-%'"));

$traffic_curr_meg = $traffic_curr_month[bytes] / 1048576;

$traffic_curr_meg = round($traffic_curr_meg, 2);



// считаем траффик прошлого месяца

$traffic_old_month = mysql_fetch_array(mysql_query("SELECT SUM(bytes) AS `bytes`

FROM `" . $IF_out_servera . "_" . date(Y,time()) . "` WHERE

`to_IP` ='" . $ip_out_servera . "' AND `date`

LIKE '" . $old_month . "-%'"));

$traffic_old_meg = $traffic_old_month[bytes] / 1048576;

$traffic_old_meg = round($traffic_old_meg, 2);

?>

Всего было траффика за&nbsp; &nbsp; этот &nbsp; &nbsp;

месяц: &nbsp; <?php echo $traffic_curr_meg; ?> мегабайт<br>

Всего было траффика за прошлый месяц:

<?php echo $traffic_old_meg; ?> мегабайт<br>

</FORM>

</BODY>

</HTML>



<?php ?>



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



<?php

// IP хостов, интерфейсы,

$ip_out_servera = "222.222.222.222"; // внешний IP сервака

$ip_internal_servera = "192.168.0.254"; // внутренний IP сервака

$IF_out_servera = "fxp0"; // название внешнего интерфейса сервака

$IF_internal_servera = "sis0"; // название внутреннего интерфейса сервака

$lan_mask = "192.168."; // маска по которой выбираются IP для подсчёта

//Пароли для подключения к MySQL

$db_host = "localhost";

$db_user = "trafd";

$db_passwd = "trafd";

$db_db = "trafd";

// достаём IP того кто хочет посмотреть

$ip = $_SERVER['REMOTE_ADDR'];

//Пытаемся приконнектится к БД

if(!mysql_connect($db_host,$db_user,$db_passwd))

{

echo "<br><br><BIG><CENTER>

Не могу прислюнявиться к MySQL-серванту!</CENTER></BIG>";

exit;

}

//Выбираем базу данных

mysql_select_db($db_db);

// определяем текущий месяц, и прошлый месяц - для вывода статистики

$curr_month = date(Y,time()) . "-" . date(m,time());

// строим HTML страничку:

?>

<HEAD>

<title>Страница статистики</title>

<meta http-equiv="Content-Type" content="text/html;

charset=windows-1251">

<STYLE type="text/css">

#main_table .hilightoff {BACKGROUND: white}

#main_table .hilighton {BACKGROUND: #ccbbff}

#cheresstrochnaya_table .hilightoff {BACKGROUND: #88ff88}

#cheresstrochnaya_table .hilighton {BACKGROUND: #ccbbff}

</STYLE>

<BODY>

<BIG><CENTER>СТАТИСТИКА ИНТЕРНЕТА</CENTER></BIG><br><br>

<TABLE border="1" cellspacing="0" cellpadding="0" width="100%" id="main_table">

<TBODY>

<TR>

<TD height="20" align="center" colspan="4">

<BIG><CENTER>статистика за текущий месяц

<?php echo $curr_month; ?></CENTER></BIG></TD>

</TR>

<TR>

<TD height="20" align="center" colspan="4">&nbsp;</TD>

</TR>

<TR>

<TD height="20" width="15%" align="center">

<b>IP - адрес</b></TD>

<TD height="20" width="25%" align="center">

<b>Пользователь</b></TD>

<TD height="20" width="30%" align="center">

<b>сколько скачано, мегабайт</b></TD>

<TD height="20" width="30%" align="center">

<b>сколько осталось мегабайт</b></TD>

</TR>

<TR>

<TD height="20" width="15%" align="center">&nbsp;</TD>

<TD height="20" width="25%" align="center">&nbsp;</TD>

<TD height="20" width="30%" align="center">&nbsp;</TD>

<TD height="20" width="30%" align="center">&nbsp;</TD>

</TR>

<?php

// вытаскиваем статистику по пользователям из БД

$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM `"

. $IF_internal_servera . "_2005` WHERE `date` LIKE '"

. $curr_month . "-%' AND to_IP != '" . $ip_out_servera .

"' AND `to_IP` != '" . $ip_internal_servera .

"' AND `to_IP` = '" . $ip . "' AND `from_IP` != '"

. $ip_internal_servera . "' GROUP BY `to_IP` ORDER BY

`bytes` DESC");

// Строим табличку по тем кого достали

// вытаскиваем рейтинг страниц из БД

while ($d = mysql_fetch_assoc($sql)) {

// собственно тут вывод результатов.

$bytes = $d['bytes'] /1048576;

$bytes = round($bytes, 2);

// определяем пользователя

if($d['to_IP'] == '192.168.0.21'){$user_name = 'Петров Ф. А.';}

if($d['to_IP'] == '192.168.0.17'){$user_name = 'Сидоров Н. А.';}

if($d['to_IP'] == '192.168.0.13'){$user_name = 'Иванов А.Л.';}

// считаем скока осталось траффику

$bytes_ostalos = 200 - $bytes;

?>

<tr class=hilightoff onmouseover="className='hilighton';"

onmouseout="className='hilightoff';">

<td style="border-bottom: 1px solid #707680;"

width="" align="left"><?php echo $d['to_IP']; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="left"><?php echo $user_name; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="center"><?php echo $bytes; ?></td>

<td style="border-bottom: 1px solid #707680;"

width="" align="center"><?php echo $bytes_ostalos; ?></td>

</tr>

<?php

unset ($user_name);

unset ($bytes);

unset ($bytes_ostalos);

}

?>

</TBODY>

</TABLE>

</BODY>

</HTML>

<?php ?>



То есть, просто определяется IP адрес компьютера с которого был сделан http запрос, и выводится статистика только для этого адреса. Если за одним компьютером работает больше одного пользователя - то надо придумывать что-то дополнительно

Обновлено: 12.03.2015