// WR-Counter v 1.4 // 19.08.16 г. // 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(" ",' ',$text); $text=str_replace(">",'>',$text); $text=str_replace("<",'<',$text); $text=str_replace("\"",'"',$text); $text=preg_replace("/\n\n/",'
',$text);
$text=preg_replace("/\n/",'
',$text);
$text=preg_replace("/\\\$/",'$',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'\',$text);
$text=str_replace("\r\n","
",$text);
$text=str_replace("\n\n",'
',$text);
$text=str_replace("\n",'
',$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"); $recordsm=$records; $maxm=$maxi;
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]"; // Собираем все просмотренные страницы и потом их сортируем
$lines_os[$i]="$dt[3]"; // Собираем все операционные системы
$lines_br[$i]="$dt[2]"; // Собираем все браузеры
$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); // считаем кол-во посещений каждой страницы
$lines_os2=array_count_values($lines_os); // считаем кол-во операционных систем
$lines_br2=array_count_values($lines_br); // считаем кол-во браузеров
arsort($newlines2); reset($newlines2); // сортируем
arsort($lines_os2); reset($lines_os2);
arsort($lines_br2); reset($lines_br2);
//print"
"; print_r ($lines_br2); exit; // Работаем со страницами $msg.="Статистика по просматриваем страницам (по хитам)
"; 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.=""; $i++; } while ($i<=count($newlines2)); // Работаем с ОС $msg_os=" $i "; $hrtext=$massiv[0]; if (strlen($massiv[0])>70) { $hrtext=substr($hrtext,0,70); $hrtext.="...";} if ($massiv[1]>1 and $massiv[0]!="СТРАНИЦА НЕ РАСПОЗНАНА") $msg.="$hrtext"; else $msg.="$hrtext"; $msg.=" $massiv[1] $procent Статистика по операционным системам (по хитам)
№ п/п | ОС | Просмотров | |||||||||||||||||||||||||||||||||||||||
$num | "; $hrtext=$massiv[0]; if (strlen($massiv[0])>70) { $hrtext=substr($hrtext,0,70); $hrtext.="...";} if ($massiv[1]>1 and $massiv[0]!="СТРАНИЦА НЕ РАСПОЗНАНА") $msg_os.="$hrtext"; else $msg_os.="$hrtext"; $msg_os.=" | $massiv[1] $procent |
№ п/п | Браузер | Просмотров |
$num | "; $hrtext=$massiv[0]; if (strlen($massiv[0])>70) { $hrtext=substr($hrtext,0,70); $hrtext.="...";} if ($massiv[1]>1 and $massiv[0]!="СТРАНИЦА НЕ РАСПОЗНАНА") $msg_br.="$hrtext"; else $msg_br.="$hrtext"; $msg_br.=" | $massiv[1] $procent | ИТОГО (по самым популярным браузерам): | ';
if ($msg_br_c>10) {
$mc=round($msg_br_c*$scale1); $delta=100*$msg_br_c/$maxi; $procent=round($delta,0); $procent="($procent %)";
$msg_br.="
- | CHROME | $msg_br_c $procent |
- | FIREFOX | $msg_br_f $procent |
- | SAFARI | $msg_br_s $procent |
- | OPERA | $msg_br_o $procent |
";
// Если нет данных за выбранную дату, то выдаём сообщение с ошибкой!
if (!is_file("data/$lastday1.dat")) print"« Предыдущая дата: $lastday1 г."; else print"« Предыдущая дата: $lastday1 г."; print" |
"; if ($dayn!=0 and $dayn!=6) print"$weeks[$dayn]"; else print "$weeks[$dayn]"; print" Итого хитов: $hitov Итого хостов: $numip Уникальных страниц: $numsys |
";
// Если нет данных за выбранную дату, то выдаём сообщение с ошибкой!
if (!is_file("data/$nextday1.dat")) print"Следующая дата: $nextday1 г. »"; else print"Следующая дата: $nextday1 г. »"; print" |
"; if ($day==$dtt[0]) print"$xday"; else print"$xday"; print" | \r\n"; } // конец FOR echo'
№ п/п | Страница | Просмотров * |
"; if (sizeof($records)>=1) { // ЕСЛИ есть данные - то выводим графики if ($gtype=="1") { $itogohit=0; $itogohost=0; // ГОРИЗОНТАЛЬНЫЙ график $xdaym=" | |||||||||||||||||||||||||||||||||||||||||
Дата | \r\n "; $graph1=""; $graph2=""; // Формируем данные для графиков $g1shapka=" |
К О Л - В О Х И Т О В | \r\n"; $g2shapka=" |
К О Л - В О Х О С Т О В | \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.=" |
| \r\n";
$graph2.="
| \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.="$xday | \r\n"; } // конец FOR $xdaym.="ИТОГО | "; $graph1.="
| \r\n";
$graph2.="
| \r\n";
$mm1=$months[$m0]; $mm2=$months[$m1]; if ($mm1==$mm2) {$mm1="";} else {$mm1.=" - ";}
$msdat="
Дата | КОЛ-ВО ХИТОВ | |||||||||||||||
\r\n"; $g2shapka=" |
Дата | КОЛ-ВО ХОСТОВ | ||
\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.=" | |||
$xday |
| ||
$xday |
| ||
$g1shapka $graph1 $xdaym |