big-moving.ru/api/soft/counter/info.php

262 lines
13 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<? // WR-Counter v 1.3 // 24.07.12 г. // Miha-ingener@yandex.ru
#error_reporting (E_ALL);
include "config.php";
function prcmp ($a, $b) {if ($a==$b) return 0; if ($a<$b) return -1; return 1;}
$months=array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");
$weeks=array("Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота");
$deldt=time()-$days*86400; // формируем дату удаления файлов статистики
function replacer ($text) { // ФУНКЦИЯ очистки кода
$text=str_replace("&#032;",' ',$text);
$text=str_replace(">",'&gt;',$text);
$text=str_replace("<",'&lt;',$text);
$text=str_replace("\"",'&quot;',$text);
$text=preg_replace("/\n\n/",'<p>',$text);
$text=preg_replace("/\n/",'<br>',$text);
$text=preg_replace("/\\\$/",'&#036;',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'&#092;',$text);
$text=str_replace("\r\n","<br> ",$text);
$text=str_replace("\n\n",'<p>',$text);
$text=str_replace("\n",'<br> ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
return $text; }
if (is_file("$datadir/mainbase.dat")) $ftime=filemtime("$datadir/mainbase.dat")+300; else $ftime=0; // + 5 минут
$tektime=time();
if ($ftime<$tektime) { // Если дата создания файла mainbase.dat менее 5 минут назад, статистику НЕ ПЕРЕСТРАИВАЕМ!
$i=0; if ($handle = opendir($datadir)) {
while (($file = readdir($handle)) !== false)
if (!is_dir($file)) {$records[$i]=$file; $i++;}
closedir($handle);
} else print 'В папке, которую вы указали нет данных счётчика!';
$itogo=count($records); $k=0; $text=null;
do {
$fline=file("$datadir/$records[$k]"); $fitogo=count($fline);
if ($fitogo!=0 and $records[$k]!="all.dat" and $records[$k]!="last.dat" and $records[$k]!="mainbase.dat" and $records[$k]!=".htaccess")
{
$thendayx=str_replace(".dat","",$records[$k]);
$dt=explode(".",$thendayx);
$then=mktime(0,0,0,$dt[1],$dt[0],$dt[2]);
$tekdate=date("d.m.Y",$then);
if ($deldt>$then) unlink ("$datadir/$records[$k]"); // Удаляем статистику позднее $maxdays (XX дней, указано в админке)
// Блок считает ХОСТЫ (уникальных посетителей)
usort($fline,"prcmp"); $numip="0"; $hi=0; $ab="0"; $ac="0";
do { $dt=explode("|",$fline[$hi]);
if ($ab!=$dt[0]) {$ab=$dt[0]; $numip++;}
$hi++; } while ($hi<$fitogo);
$text.="$then|$fitogo|$numip||$records[$k]|\r\n";
}
unset($fitogo);
unset($fline);
$k++;
} while ($k<$itogo);
$fp=fopen("$datadir/mainbase.dat","w");
flock ($fp,LOCK_EX);
fputs($fp,"$text");
fflush ($fp);//очищение файлового буфера
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$datadir/mainbase.dat", 0644);
} // if ($ftime<$tektime)
// сортируем данные
$records=file("$datadir/mainbase.dat"); $maxi=count($records); usort($records,"prcmp");
if (isset($_GET['day'])) { $day=$_GET['day']; // ПРОСМОТР СТАТИСТИКИ ЗА СУТКИ (по каждой странице)
if (strlen($day)<12 and ctype_digit($day)) {
$file=date("d.m.Y",$day);
if (is_file("data/$file.dat")) { $records=file("data/$file.dat"); $maxi=count($records); $hitov=$maxi;
if (isset($_POST['findme'])) {
$findme=replacer($_POST['findme']);
$stroka=strlen($findme); if($stroka>2 and $stroka<30) {
$temprecord=$records; $records=null; $i=0; $hitov=count($temprecord);
foreach($temprecord as $v) {if (strpos($v,$findme)) {$i++; $records[$i]=$v;}}
$maxi=$i; $hitov="$hitov / $maxi";}} else $findme="";
// Блок считает ХОСТЫ (уникальных посетителей)
usort($records,"prcmp");
$numip=0; $numsys=0; $i=0; $ab="0"; $ac="0"; $ad="0"; $newlines=null;
do { $dt=explode("|",$records[$i]); $newlines[$i]="$dt[4]"; $i++; } while ($i<$maxi);
usort($newlines,"prcmp"); $i=0; // Сортируем все просмотренные страницы
do { $dt=explode("|",$records[$i]);
if ($ab!=$dt[0]) {$ab=$dt[0]; $numip++;}
if ($ad!=$newlines[$i]) {$ad=$newlines[$i]; $numsys++;}
$i++; } while ($i<$maxi);
$i=1; $msg=""; // Собираем информацию о посещаемых страницах
$newlines2=array_count_values($newlines); // считаем кол-во посещений каждой страницы
arsort($newlines2); reset($newlines2);
do {
$massiv=each($newlines2);
$m2=round($massiv[1]*$scale1*5);
$delta=100*$massiv[1]/$maxi;
if ($delta>2) $addstyle="bgcolor=#E6FFE6"; else $addstyle="";
if ($delta>5) $addstyle="bgcolor=#CAFFCA";
if ($delta>10) $addstyle="bgcolor=#64FF64";
$procent=round($delta,1); $procent="($procent %)";
if (strlen($massiv[0])<1) $massiv[0]="СТРАНИЦА НЕ РАСПОЗНАНА";
$msg.="<TR $addstyle><TD align=center>$i</TD><TD>";
$hrtext=$massiv[0]; if (strlen($massiv[0])>70) { $hrtext=substr($hrtext,0,70); $hrtext.="...";}
if ($massiv[1]>1 and $massiv[0]!="СТРАНИЦА НЕ РАСПОЗНАНА") $msg.="<a href='$massiv[0]'>$hrtext</a>"; else $msg.="$hrtext";
$msg.="</td><td><img src='images/g1.gif' width=$m2 height=16 border=0> <B>$massiv[1]</B> $procent</TD></TR>"; $i++; } while ($i<=count($newlines2));
$dayn=date("w",$day); // Считаваем день недели по порядку
$lastday1=date("d.m.Y",$day-86400); $lastday2=$day-86400;
$nextday1=date("d.m.Y",$day+86400);$nextday2=$day+86400;
print"<center>
<table align=center border=0><TR>
<TD align=center bgcolor=#F2F2F2><a href='info.php?day=$lastday2'><--<br> Предыдущая дата:<br>$lastday1 г.</a></TD>
<TD><center>Дата: <B>$file</B> г.<br><B>";
if ($dayn!=0 and $dayn!=6) print"$weeks[$dayn]"; else print "<font color=red>$weeks[$dayn]</font>";
print"</B><br>
Итого хитов: <font size=+2><B>$hitov</B></font><br>
Итого хостов: <font size=+2><B>$numip</B></font><br>
Уникальных страниц: <font size=+2><B>$numsys</B></font></TD>
<TD align=center bgcolor=#F2F2F2><a href='info.php?day=$nextday2'>Следующая дата:<br>$nextday1 г.<br> --></a></TD>
</TR></TABLE><br>
<a href='info.php'>Вернуться на страницу статистики</a><br><br>
<div align=right><form action='info.php?day=$day' method=POST name=finder>
Фильтр по страницам: <input name='findme' value='$findme' class=post type='text' maxlength=50 size=20>
<input type=submit value='Искать'>
</form></div>
<table border=0 cellSpacing=0 cellPadding=0 align=center>
<TR align=center><TD>№ п/п</TD><TD>Страница</TD><TD>Просмотров *</TD></TR>
$msg
</table>
</center>";
} else print"Статистики посещений за указанный Вами день нет.";// if is_file
}
echo'<br><small>* При использовании поиска количество хостов, уникальных страниц, а также процент считается от<br>
того количества страниц, которое попало под фильтр, а не от общего количества страниц!</small>';
} else { // if isset($day). ИНАЧЕ показываем общую страницу статистики
print"<HTML><head><META content='text/html; charset=windows-1251' http-equiv=Content-Type><title>Информация по посещаемости сайта</title><meta name=\"Robots\" content=\"noindex,npfollow\"></head>
<BODY text=#000000 leftMargin=0 topMargin=0 rightMargin=0 bottomMargin=0 marginheight=0 marginwidth=0><center>
<B>Информация по посещаемости</B> *<TABLE cellSpacing=0 cellPadding=0 width=\"98%\"><TR><TD valign=top>";
if (sizeof($records)>=1) { // ЕСЛИ есть данные - то выводим графики
if ($gtype=="1") { $itogohit=0; $itogohost=0; // ГОРИЗОНТАЛЬНЫЙ график
$xdaym="</TR><TR><TD align=center><small>Дата</TD><TD>&nbsp;</TD>\r\n "; $graph1=""; $graph2=""; // Формируем данные для графиков
$g1shapka="<table border=0 cellSpacing=0 cellPadding=0 align=center><tr align=center valign=bottom><TD valign=middle><small>К<BR>О<BR>Л<BR>-<BR>В<BR>О<BR><B><BR>Х<BR>И<BR>Т<BR>О<BR>В</TD><TD><img src='images/v1scale.gif' border=0></TD>\r\n";
$g2shapka="<table border=0 cellSpacing=0 cellPadding=0 align=center><tr align=center valign=bottom><TD valign=middle><small>К<BR>О<BR>Л<BR>-<BR>В<BR>О<BR><B><BR>Х<BR>О<BR>С<BR>Т<BR>О<BR>В</TD><TD><img src='images/v2scale.gif' border=0></TD>\r\n";
for ($i=0; $i<$maxi; $i++) { // начало FOR
$dtt=explode("|",$records[$i]);
$dttn1=round($dtt[1]*$scale1); // шкала 1-го графика
$dttn2=round($dtt[2]*$scale2); // шкала 2-го графика
$itogohit=$itogohit+$dtt[1];
$itogohost=$itogohost+$dtt[2];
$graph1.="<TD><table cellSpacing=0 cellPadding=0><TR><TD width=24 align=center><small>$dtt[1]</small></TD></TR><TR><TD align=center><img src='images/v1.gif' height=$dttn1 width=20></TD></TR></TABLE></td>\r\n";
$graph2.="<TD><table cellSpacing=0 cellPadding=0><TR><TD width=24 align=center><small>$dtt[2]</small></TD></TR><TR><TD align=center><img src='images/v2.gif' height=$dttn2 width=20></TD></TR></TABLE></td>\r\n";
if (!isset($m0)) {$m0=date("m",$dtt[0])-1;}
if ($i==$maxi-1) {$m1=date("m",$dtt[0])-1;}
$xday=date("d",$dtt[0]);
$dayn=date("w",$dtt[0]); // Считаваем день недели по порядку
if ($dayn=="0" or $dayn=="6") $weekstyle="bgcolor=#FF7979"; else $weekstyle="";
$xdaym.="<td $weekstyle align=center><small><a href='info.php?day=$dtt[0]'>$xday</a></small></TD>\r\n";
} // конец FOR
$xdaym.="<td width=100 align=center>&nbsp;</TD><td align=center><small>ИТОГО</small></TD>";
$graph1.="<td align=center>&nbsp;</TD><TD><table cellSpacing=0 cellPadding=0><TR><TD width=24 align=center><small>$itogohit</small></TD></TR><TR><TD align=center><img src='images/v1.gif' height=230 width=20></TD></TR></TABLE></td>\r\n";
$graph2.="<td align=center>&nbsp;</TD><TD><table cellSpacing=0 cellPadding=0><TR><TD width=24 align=center><small>$itogohost</small></TD></TR><TR><TD align=center><img src='images/v2.gif' height=230 width=20></TD></TR></TABLE></td>\r\n";
$mm1=$months[$m0]; $mm2=$months[$m1]; if ($mm1==$mm2) {$mm1="";} else {$mm1.=" - ";}
$msdat="</TR></TABLE><center>Период: &nbsp; <B>$mm1 $mm2</B> ($days дн.)</center>\r\n";
print"$g1shapka $graph1 $xdaym </TR></TABLE>"; // печатаем 1-ый ГРАФИК
print"$g2shapka $graph2 $xdaym $msdat"; // печатаем 2-ой ГРАФИК
} else { // ВЕРТИКАЛЬНЫЙ график
$g1shapka="<table cellSpacing=0 cellPadding=0 align=center><tr align=center valign=bottom><TD valign=middle><small>Дата</TD><TD>КОЛ-ВО <B>ХИТОВ</TD></TR><TR><TD>&nbsp;</TD><TD><img src='images/g1scale.gif' border=0></TD>\r\n";
$g2shapka="<table cellSpacing=0 cellPadding=0 align=center><tr align=center valign=bottom><TD valign=middle><small>Дата</TD><TD>КОЛ-ВО <B>ХОСТОВ</TD></TR><TR><TD>&nbsp;</TD><TD><img src='images/g2scale.gif' border=0></TD>\r\n";
$xdaym=""; $graph1=""; $graph2=""; // Формируем данные для графиков
for ($i=0; $i<$maxi; $i++) { // начало FOR
$dtt=explode("|",$records[$i]);
//$dtt[0]=date("d.m.y",$dtt[0]);
if (!isset($m0)) {$m0=date("m",$dtt[0])-1;}
if ($i==$maxi-1) {$m1=date("m",$dtt[0])-1;}
$xday=date("d",$dtt[0]);
$dttn1=round($dtt[1]*$scale1); // шкала 1-го графика
$dttn2=round($dtt[2]*$scale2); // шкала 2-го графика
$graph1.="<tr><TD align=center><small>$xday</small></TD><td><table cellSpacing=0 cellPadding=0><TR><TD><img src='images/g1.gif' height=16 width=$dttn1></TD><TD align=center>&nbsp; <small>$dtt[1]</small></TD></TR></TABLE></td></tr>";
$graph2.="<tr><TD align=center><small>$xday</small></TD><td><table cellSpacing=0 cellPadding=0><TR><TD><img src='images/g2.gif' height=16 width=$dttn2></TD><TD align=center>&nbsp; <small>$dtt[2]</small></TD></TR></TABLE></td></tr>";
} // конец FOR
$mm1=$months[$m0]; $mm2=$months[$m1]; if ($mm1==$mm2) {$mm1="";} else {$mm1.=" - ";}
$msdat="</tr><TR><TD colspan=2><center><small>Период:</small> <B>$mm1 $mm2</B></center>\r\n";
print"<BR>$g1shapka $graph1 $xdaym </TR></TABLE></TD><TD width='50%' valign=top> <!-- Делим экран пополам -->"; // печатаем 1-ый ГРАФИК
print"<BR>$g2shapka $graph2 $xdaym </TR></TABLE></TD>$msdat<BR>"; // печатаем 2-ой ГРАФИК
} // else ($gtype)
print"</center><small>P.S. <B>Хиты</B> - общее количество просмотров страниц где установлен счётчик;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <B>Хосты</B> - количество посетителей с уникальным IP-адресом.<BR>
Статистика обновляется каждые 5 минут. Следующее обновление в ". date("H:i:s",$ftime)."</small>";
} else {print"<center><br><br>Данные для графика отсутствуют.<br> Посещений за последний период не было.<br><br>";}
} // else от if isset($day)
?>
</TD></TR></table>
</body></html>