При работе над сайтом бывает очень полезно проанализировать логи посещений Вашего сайта. Таким образом, можно узнать, как часто Ваш сайт посещают поисковые роботы, и какие переходы по сайту осуществляют пользователи. Скрипт будет записывать все переходы на Вашем сайте в специальный файл, расположенный на сервере, который потом можно будет просмотреть.
Скрипт будет полезен для тех, кто пользуется хостингом без предоставления доступа к log-файлам.
Добавляете PHP-код в начало страниц, при посещении которых будут писаться логи:
<?php $file="base.log"; //куда пишем логи $col_zap=4999; //строк в файле не более // function getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) // Определяем IP { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) // Если IP идёт через прокси { $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); ?>
Либо, если у Вас на каждой страничке подгружается какой-нибудь php-файл через include, то поместите этот код в тот самый подгружаемый php-файл.
Для просмотра результатов лога, создайте php-файл с любым именем:
<?php
if (isset($_GET[col])) { $col=$_GET[col]; } else { $col=50; }
$file=file("base.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>';
?>
При обращении к файлу просмотра результатов лога, на экране будет отображаться примерно такая табличка:
Последние 5 посещений сайта:
Время, дата | Кто посещал | IP, прокси | Посещенный URL |
19:08:40 04.11 | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) | 211.11.11.11 | /log_info.php |
19:06:19 04.11 | Mozilla/4.0 (Windows 98; US) Opera 10.00 [en] | 123.23.23.23 | /video_download.php |
19:00:06 04.11 | Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0 | 122.22.22.22 | current_time.php |
18:45:59 03.11 | Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.11 | 111.11.11.11 | /script_menu_left.php |
18:45:59 03.11 | Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.11 | 111.11.11.11 | /script_menu_left_example.php |
*UPD
Ранее рассматривали Скрипт записи логов посещений сайта, но как потом выяснилось, у него имелось пару недочетов. Главный недочет заключался в том, что при большой посещаемости могла потеряться часть лога из-за того, что не было блокировки файла лога на момент записи/чтения. Так же разнесены логи поисковиков и обычных посетителей в разные файлы.
Для того чтобы писать логи в файл, добавьте в шаблон, либо в начало страниц, при посещении который будут писаться логи:
<?php
$file="base_bot"; //имя файла с логами ботов
$col_zap=2499; //записей в логе ботов
$xxx=trim(strip_tags($_SERVER['HTTP_USER_AGENT']));
if (strpos($xxx, 'YandexBot')!==false) {$bot='YandexBot';}
elseif (strpos($xxx, 'Googlebot')!==false) {$bot='Googlebot';}
elseif (strpos($xxx, 'bingbot')!==false) {$bot='Bingbot';}
elseif (strpos($xxx, 'Mail')!==false) {$bot='Mail.ru';}
elseif (strpos($xxx, 'YandexBlogs')!==false) {$bot='YandexBlogs';}
elseif (strpos($xxx, 'YandexImage')!==false) {$bot='YandexImages';}
elseif (strpos($xxx, 'YandexFavicons')!==false) {$bot='YandexFavicons';}
elseif (strpos($xxx, 'YandexDirect')!==false) {$bot='YandexDirect';}
elseif (strpos($xxx, 'YandexNews')!==false) {$bot='YandexNews';}
elseif (strpos($xxx, 'YandexSomething')!==false) {$bot='YandexSomething';}
elseif (strpos($xxx, 'YandexMetrika')!==false) {$bot='YandexMetrika';}
elseif (strpos($xxx, 'YandexAntivirus')!==false) {$bot='YandexAntivirus';}
elseif (strpos($xxx, 'Feedfetcher-Google')!==false) {$bot='Feedfetcher-Google';}
elseif (strpos($xxx, 'Googlebot-Image')!==false) {$bot='Googlebot-Image';}
elseif (strpos($xxx, 'Yahoo')!==false) {$bot='Yahoo!';}
elseif (strpos($xxx, 'WebCrawler')!==false) {$bot='WebCrawler';}
elseif (strpos($xxx, 'ZyBorg')!==false) {$bot='ZyBorg';}
elseif (strpos($xxx, 'Scooter')!==false) {$bot='AltaVista';}
elseif (strpos($xxx, 'StackRambler')!==false) {$bot='Rambler';}
elseif (strpos($xxx, 'Aport')!==false) {$bot='Aport';}
elseif (strpos($xxx, 'lycos')!==false) {$bot='Lycos';}
elseif (strpos($xxx, 'fast')!==false) {$bot='Fast Search';}
elseif (strpos($xxx, 'msnbot')!==false) {$bot='MSN';}
elseif (strpos($xxx, 'Nigma.ru')!==false) {$bot='Nigma';}
elseif (strpos($xxx, 'ia_archiver')!==false) {$bot='Alexa';}
elseif (strpos($xxx, 'Baiduspider')!==false) {$bot='Baidu';}
elseif (strpos($xxx, 'Exabot')!==false) {$bot='Exabot';}
elseif (strpos($xxx, 'archive.org_bot')!==false) {$bot='Archive.org';}
elseif (strpos($xxx, 'Ezooms')!==false) {$bot='Ezooms';}
elseif (strpos($xxx, 'GrepNetstat.com Bot')!==false) {$bot='GrepNetstat.com';}
elseif (strpos($xxx, 'MJ12bot')!==false) {$bot='Majestic-12';}
elseif (strpos($xxx, 'AhrefsBot')!==false) {$bot='Ahrefs';}
elseif (strpos($xxx, 'TurnitinBot')!==false) {$bot='Turnitin';}
elseif (strpos($xxx, 'discobot')!==false) {$bot='Discobot';}
elseif (strpos($xxx, 'Subscribe.Ru')!==false) {$bot='Subscribe';}
elseif (strpos($xxx, 'TOP.NET.RU')!==false) {$bot='TOP.NET.RU';}
elseif (strpos($xxx, 'SISTRIX Crawler')!==false) {$bot='SISTRIX';}
elseif (strpos($xxx, 'Wotbox')!==false) {$bot='Wotbox';}
else {
$file="base_user"; //имя файла с логами пользователей
$col_zap=3499; //записей в логе пользователей
$bot=htmlspecialchars(substr($xxx,0,80));//обрезаем USER-AGENT до 80 символов
}
//записываем логи в файл с блокировкой
$l_cash='';
$fh=fopen($file,"a+");
flock($fh,LOCK_EX);
fseek($fh,0);
while (!feof($fh)) $l_cash.= fread($fh,8192);
$lines=explode("\n",$l_cash);
while(count($lines)>$col_zap) array_shift($lines);
$l_cash=implode("\n",$lines);
$l_cash.=date("H:i:s d.m")."|".$bot."|".$_SERVER['REMOTE_ADDR']."|".
htmlspecialchars($_SERVER['REQUEST_URI'])."\n";
ftruncate($fh,0);
fwrite($fh,$l_cash);
flock($fh,LOCK_UN);
fclose($fh);
?>
Как видно, код стал гораздо больше, но это связано с тем, что в него добавлено проверка на ботов, которые чаще всего посещают сайты.
Для просмотра результатов лога нужно создать отдельный PHP файл с любым названием:
<?php
if (isset($_GET["col"])) $col=$_GET["col"]; else $col=50;
$lines_cashe=file_get_contents("base_user", LOCK_EX);
$file=explode("\n",$lines_cashe);
$size_f=count($file)-1;
?>
<html>
<head>
<style type='text/css'>
td.zz { padding-left: 3px; font-size: 9pt; padding-top: 2px; font-family: Arial; }
</style>
</head>
<body>
<div style="text-align: center;">
<?php
if ($col>$size_f) $col=$size_f;
echo 'Последние <b>'.$col.'</b> посещений сайта ботами:';
?>
<table style="width: 750px; table-layout: fixed; border: 0;">
<tr bgcolor="#eeeeee">
<td class="zz" style="width: 100px;"><b>Время, дата</b></td>
<td class="zz" style="width: 250px;"><b>Кто посещал</b></td>
<td class="zz" style="width: 100px;"><b>IP, прокси</b></td>
<td class="zz" style="width: 300px;"><b>Посещенный URL</b></td>
</tr>
<?php
for ($si=$size_f-1; $si>=$size_f-$col; $si--) {
$str=explode("|",$file[$si]);
echo '<tr bgcolor="#eeeeee"><td class="zz">'.$str[0].'</td>';
echo '<td class="zz">'.$str[1].'</td>';
echo '<td class="zz">'.$str[2].'</td>';
echo '<td class="zz"><a href="http://usefulscript.ru'.$str[3].'">'.$str[3];
echo '</a></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>.';
echo '</div></body></html>';
?>
В таблице будут отображаться только визиты простых пользователей (т.к. в base_user содержатся логи пользователей). Для того чтобы просмотреть логи ботов, Вам необходимо по аналогии создать еще один точно такой же PHP файл, в котором необходимо будет заменить имя файла с логами (base_user на base_bot).
Комментарии:
Нет комментариев к этой статье.