Pull to refresh

Статистика посещений сайта без сторонних сервисов

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

Есть решение: использовать вместе со сторонними сервисами свой скрипт учёта посещений сайта.

Наш скрипт будет состоять из трёх файлов:
  • stat.php — инклудится в каждую страницу, за которой необходимо следить
  • stat.log — файл, в который будет записываться история посещений
  • seestats.php — файл, для просмотра статистики

На самом деле, можно использовать любые имена файлов.

Файл stat.php
<?php
$file="stat.log";    // файл для записи истории посещения сайта
$col_zap=4999;    // ограничиваем количество строк log-файла 

function getRealIpAddr() {
  if (!empty($_SERVER['HTTP_CLIENT_IP']))        // Определяем IP
  { $ip=$_SERVER['HTTP_CLIENT_IP']; }
  elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
  { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; }
  else { $ip=$_SERVER['REMOTE_ADDR']; }
  return $ip;
}

if (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexBot')) {$bot='YandexBot';} //Выявляем поисковых ботов
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot')) {$bot='Googlebot';}
else { $bot=$_SERVER['HTTP_USER_AGENT']; }

$ip = getRealIpAddr();
$date = date("H:i:s d.m.Y");        // определяем дату и время события
$home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];    // определяем страницу сайта
$lines = file($file);
while(count($lines) > $col_zap) array_shift($lines);
$lines[] = $date."|".$bot."|".$ip."|".$home."|\r\n";
file_put_contents($file, $lines);
?>


Что бы каждый раз вручную не копать файл stat.log, создадим файл для вывода статистики посещений сайта:
Файл seestats.php
<?php
if (isset($_GET[col])) { $col=$_GET[col]; } else { $col=50; }
$file=file("stat.log"); ?>

<html>
<head>
<style type='text/css'>
 td.zz {PADDING-LEFT: 3px; FONT-SIZE: 9pt; PADDING-TOP: 2px; FONT-FAMILY: Arial; }
</style>
</head>

<body>
<center>
<?php
if ($col>sizeof($file)) { $col=sizeof($file); }
echo "Последние <b>".$col."</b> посещений сайта:"; ?>

<table width="680" cellspacing="1" cellpadding="1" border="0"
    STYLE="table-layout:fixed">
<tr bgcolor="#eeeeee">
 <td class="zz" width="100"><b>Время и дата</b></td>
 <td class="zz" width="200"><b>Данные о посетителе</b></td>
 <td class="zz" width="100"><b>IP/прокси</b></td>
 <td class="zz" width="280"><b>Посещенный URL</b></td>
</tr>

<?php
   for ($si=sizeof($file)-1; $si+1>sizeof($file)-$col; $si--) {
   $string=explode("|",$file[$si]);
   $q1[$si]=$string[0]; // дата и время
   $q2[$si]=$string[1]; // имя бота
   $q3[$si]=$string[2]; // ip бота
   $q4[$si]=$string[3]; // адрес посещения
echo '<tr bgcolor="#eeeeee"><td class="zz">'.$q1[$si].'</td>';
echo '<td class="zz">'.$q2[$si].'</td>';
echo '<td class="zz">'.$q3[$si].'</td>';
echo '<td class="zz">'.$q4[$si].'</td></tr>';
}
echo '</table>';
echo '<br>Просмотреть последние <a href=?col=100>100</a> <a href=?col=500>500</a>';
echo '<a href=?col=1000>1000</a> посещений.';
echo '<br>Просмотреть <a href=?col='.sizeof($file).'>все посещения</a>.</center>';
echo '</body></html>';
?>


Вот и всё! Теперь даже при падении liveinternet или Яндекс.Метрики, Вы всегда сможете узнать, кто заходил к Вам на сайт!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.