«Поле, русское поле...»
Кто ты? Откуда и куда тебя занесло?
шпион внешней разведки, refer(r)er логгер за пару минут
За время существования интернетов наделали уйму разных штук для сбора и анализа статистики, которые умеют обсчитывать и узнавать о посетителях практически всё что угодно, чуть ли не до цвета трусов случайного гостя сайта. Но что удивительно - ни у одного из популярных сервисов пузомерок (я пользуюсь лирушечкой и аналитиком гугля, для интереса просмотрел ещё парочку подобных) нет простого, но интересного мне отчёта - с какой страницы и куда ко мне приходят посетители.

Поэтому лепить-строгать пришлось опять самому, практически на коленке:

1. Сделал раздел куда будут складываться логи:



2. Закрыл доступ гостям:



3. И дальше наколбасил немного кода для глобального хуука, который следит за наличием рефера при заходе с другого сайта, затем ищет в закрытом разделе страничку с нужным названием (по дате), если такой нет - создаёт новую и в тело страницы пишет время, откуда и куда зашёл человек, ну и немножко его сведений типа браузера с ойпи до кучи. В результате у меня получается что-то вроде этого:

Код:
/* ====== Откуда кто куда ====== */

if ($cfg['plugin']['lduegg']['refspy'] == 1) {

unset($ref);
$sys['referer'] = substr($_SERVER['HTTP_REFERER'], 0, 1055);
$sys['week'] = @date('Y-W');
$cfg['pagecat'] = $cfg['plugin']['lduegg']['refspycat'];
$cfg['pagetitle'] = "Рефлог: ".$sys['week'];
$cfg['pagealias'] = $cfg['pagecat']."_".@date('d_M_Y');


if ((@strpos($sys['referer'], $cfg['mainurl']) === FALSE)
&& (@strpos($sys['referer'], $cfg['hostip']) === FALSE)
&& (@strpos($sys['referer'], str_replace('www.', '', $cfg['mainurl'])) === FALSE)
&& !empty($sys['referer'])
&& ($usr['level'] == 0)
&& ($usr['ip'] != "127.0.0.1"))
{

$sql = sed_sql_query("SELECT page_id, page_title, page_text, page_date FROM $db_pages WHERE page_title='".sed_sql_prep($cfg['pagetitle'])."' AND page_cat = '".sed_sql_prep($cfg['pagecat'])."' AND page_state = '0' LIMIT 1");
$count = sed_sql_numrows($sql);
$ref = sed_sql_fetcharray($sql);

$ref['text'] = date('H:i:s', $sys['now_offset'])." [url]".$sys['referer']."[/url] -> [url]".$_SERVER['REQUEST_URI']."[/url]\r\n".$_SERVER['HTTP_USER_AGENT']." | ".$_SERVER['REMOTE_ADDR']."\r\n\r\n";

if ($count>0)
{
if ( date("z", $ref['page_date']) < date("z", $sys['now_offset']) )
{ $ref['text'] .= "[b]".date('d.m.Y', $ref['page_date'])."[/b][hr]"; }

$ref['page_text'] = $ref['text'].$ref['page_text'];

$sql = sed_sql_query("UPDATE $db_pages SET
page_text='".sed_sql_prep($ref['page_text'])."',
page_date=".(int)$sys['now_offset']."
WHERE page_title='".sed_sql_prep($cfg['pagetitle'])."' AND page_cat = '".sed_sql_prep($cfg['pagecat'])."'");
}
   else
{
$sql = sed_sql_query("INSERT into $db_pages
(page_state,
page_type,
page_cat,
page_title,
page_text,
page_ownerid,
page_author,
page_date,
page_begin,
page_expire,
page_alias)
VALUES
(0,
0,
'".sed_sql_prep($cfg['pagecat'])."',
'".sed_sql_prep($cfg['pagetitle'])."',
'".sed_sql_prep($ref['text'])."',
".(int)$usr['id'].",
'".sed_sql_prep($cfg['maintitle'])."',
".(int)$sys['now_offset'].",
".(int)$sys['now_offset'].",
".(int)$sys['now_offset'].",
'".$cfg['pagealias']."')");
}
}
}


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



[ написать отзыв ]
Декабрь →
2010
вт
7
пн
6
вс
сб
пт
чт
2
ср
Ноябрь →
2010
вт
пн
вс
сб
пт
чт
ср
вт
пн
вс
сб
пт
19
чт
18
ср
17