26.05.2017 01:14:05 pm
Сегодня я опять обнаружил, что вчера мой аккаунт сильно нажал на сервер... Что же, надо искать виновного, кто из посетителей или ботов у меня прописался... Я настроил так, чтобы велась статистика посещений и записывалась в файл access_log. Статистика выглядит примерно так:
Где xxx.xxx.xxx.xxx - это IP посетителя. Наша задача выявить самых активных, записи которых составляют более тысячи штук, например. Искать в ручную, глаза устанут, так как записей в файле может быть миллиард, а то и больше. Для поиска самых активных я написал небольшой скрипт. Сейчас поделюсь им, вот он (для понимания, прокомментировал код):
На экране будет примерно такая картина (какой IP сколько раз обращался к сайту):
Вот так, мне кажется уже проще будет найти самых частообращаемых.
danfa.net xxx.xxx.xxx.xxx - - [03/May/2017:00:19:13 +0300] "GET /viewtopic.php?t=1734 HTTP/1.1" 200 51202 "-" " ... " 0
danfa.net xxx.xxx.xxx.xxx - - [03/May/2017:00:20:27 +0300] "GET /viewtopic.php?t=346 HTTP/1.1" 200 50206 "-" " ... " 0
danfa.net xxx.xxx.xxx.xxx - - [03/May/2017:00:21:49 +0300] "GET /app.php/feed HTTP/1.1" 200 146463 "-" " ... " 0
Где xxx.xxx.xxx.xxx - это IP посетителя. Наша задача выявить самых активных, записи которых составляют более тысячи штук, например. Искать в ручную, глаза устанут, так как записей в файле может быть миллиард, а то и больше. Для поиска самых активных я написал небольшой скрипт. Сейчас поделюсь им, вот он (для понимания, прокомментировал код):
$file = 'access_log-20170520'; // Имя файла "лог посещений"
$lines = file($file); // Читаем файл и создаем массив (строчка из файла - элемент массива)
// Прогоняем массив через цикл
for ($i = 0; $i < count($lines); $i++)
{
$line = explode(' ', $lines[$i]); // Разбиваем элемент в массив
$lines[$i] = $line[1]; // Меняем элемент массива "$lines" на второй элемент массива "$line"
}
// Подсчитываем количество одинаковых IP и выводим результат на экран
$count = array_count_values($lines);
// Сортируем массив
arsort($count);
echo '<pre>';
print_r($count);
echo '</pre>';
На экране будет примерно такая картина (какой IP сколько раз обращался к сайту):
Array
(
[xxx.xxx.xxx.xxx] => 309
[xxx.xxx.xxx.xxx] => 234
[xxx.xxx.xxx.xxx] => 178
[xxx.xxx.xxx.xxx] => 127
)
Вот так, мне кажется уже проще будет найти самых частообращаемых.
- Жалоба