Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Делаем простой счётчик посещаемости на чистом PHP


Многие начинающие веб-мастера обвешивают свой новый сайт тяжелыми системами статистики, вроде Яндекс-метрики и Гугл-аналитки. Конечно, если у вас лендинг, или портал с множеством посетителей эти системы вам здорово помогут. Но если ваш сайт совсем свежий, и направлен не на продажи, а на написание информационных статей, то на первых порах сторонние системы статистики ставить нежелательно.

Во-первых это замедлит загрузку сайта. Во-вторых у Яндекса и Гугла будет доступ к точному количеству посетителей вашего сайта, и если оно небольшое, ваш сайт будет плохо ранжироваться в поисковой выдаче. Пока у вас немного посетителей, лучше скрыть от поисковых гигантов истинную посещаемость. Для этого достаточно сделать свой простой скрипт для сбора статистики.

Ниже я покажу пример скрипта на PHP который подключается к любой странице вашего сайта путем простой команды include('stat.php'). Будет собираться статистика просмотров за прошедшие сутки, игнорируя поисковых ботов и неуникальных посетителей. Кроме того, в статистике будет видно с каких устройств заходят люди, и на какие именно страницы вашего сайта.

Скрипт не использует базу данных, сохраняя статистику в обычный текстовый файл stat.txt. Позаботьтесь настроить права доступа к этому файлу только от ваших скриптов изнутри сервера.

Основной скрипт, который будет собирать статистику выглядит так:

Листинг stat.php

<?php
$file = 'stat.log';    // файл для записи истории посещения сайта
$col_zap = 1999;    // ограничиваем количество строк log-файла
function getRealIpAddr() {
  if (!empty($_SERVER['HTTP_CLIENT_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'];
if (stristr($bot, 'bot') === FALSE) {
  $lines = file($file);
  while (count($lines) > $col_zap) {
    array_shift($lines);
  }
  $lines[] = $date . '|' . $bot . '|' . $ip . '|' . $home . "|\r\n";
  file_put_contents($file, $lines);
}
?>

Этот файл нужно подключить во все ваши PHP скрипты отвечающие за вывод страниц сайта. Для примера я сделаю пустую страничку test.php в которую подключу скрипт наш статитстики.

Листинг test.php

<?php
include('stat.php');
echo('Test');
?>

Не забудьте создать в той же директории где лежит скрипт статистики пустой файл stat.txt и правильно настроить права доступа к нему. Если мы начнем заходить на страничку test.php то скрипт будет записывать наши посещения в этот файл.

И наконец, мы можем посмотреть записанную статистику в табличном виде, с помощью следующего скрипта.

Листинг seestat.php

<?php
session_start();
$pass = 'mypassword';
$adminavt = 0;
if ((isset($_POST['slovo']) || isset($_POST['sekret'])) || ($_SESSION['sekret'] == md5($pass))) {
  $_SESSION['sekret'] = md5($pass);
  $adminavt = 1;
}
else {
  $code .= ('<center><form method="POST" action="seestat.php" style="margin-top: 30px;"><div style=" color: black; width: 500px; height: 100px; line-height: 100px; font-size: 24px; letter-spacing: 1px;">Панель администратора</div><input type="text" placeholder="Введите пароль" name="slovo" size="100" style="margin-top: 10px; background: #eee; color: black; font-size: 18px; width: 494px; height: 30px; line-height: 30px; "><br><input type=submit name="save" value="Войти в систему" style=" border: none; display: block; text-decoration: none; margin-top: 10px; background: #006064; text-align: center; width: 500px; height: 35px; line-height: 35px; font-size: 14px; font-weight: 500; border-radius: 2px; text-decoration: none; color: white; text-transform: uppercase;"></form></center>');
  echo($code);
};
if (($adminavt == 1) || ($_POST['slovo'] == $pass) || ($_SESSION['sekret'] == md5($pass))) {
  $_SESSION['sekret'] = md5($pass);
  $code = '';
  $mode = $_GET['mode'];
  if (isset($_GET[col])) {
    $col = $_GET[col];
  }
  else {
    $col = 500;
  }
  $file = file("stat.log");
  if ($col > sizeof($file)) {
    $col = sizeof($file);
  }
  $code = ('<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>');
  $kd = 0;
  $mas[] = array();
  $yd = date('d.m.Y', strtotime('yesterday'));
  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]; // адрес посещения
    if ((strstr($string[0], $yd)) && (!in_array($string[2], $mas))) {
      $kd = $kd + 1;
    };
    $mas[] = $string[2];
    $code .= '<tr bgcolor="#eeeeee"><td class="zz">' . $q1[$si] . '</td><td class="zz">' . $q2[$si] . '</td><td class="zz">' . $q3[$si] . '</td><td class="zz">' . $q4[$si] . '</td></tr>';
  };
  $code = '<html><head><style type="text/css"> td.zz { padding-left: 3px; font-size: 9pt; padding-top: 2px; font-family: arial; } </style></head><body style="padding-top: 20px;"><center>За вчерашний день ваш сайт посетили: <b>' . $kd . '</b> уникальных посетителей<br><br>' . $code . '</table><br>Просмотреть последние <a href=?col=1000>1000</a> посещений.<br>Просмотреть <a href=?col=' . sizeof($file) . '>все посещения</a>.</center></body></html>';
  echo($code);
}
?>

Если мы зайдем в seestat.php, он попросит нас ввести пароль, для доступа к статистике. По умолчанию пароль: mypassword.

Выглядеть наша статистика будет примерно вот так:

Скачать исходники всех скриптов из данной статьи можно тут:

Исходники статистики

Вы можете дорабатывать данный скрипт. Например, определять по IP город пользователя, строить графики посещений на основе сохраненных данных, применить вместо файла stat.txt базу данных, и так далее.

Материал подготовлен автором @pythono

967
121.876 GOLOS
На Golos с August 2017
Комментарии (3)
Сортировать по:
Сначала старые