Блог/NotFoundParamAlert продолжение

Как отслеживать несуществующие страницы с заданными URL параметрами (включая UTM метки)

Автор: Кудашев Сергей

Дошли руки доработать компонент NotFoundParamAlert, позволяющей отлавливать несуществующие страницы с заданными GET параметрами. Лично я его использую для раннего выявления ошибочно настроенных объявлений в контекстной рекламе, отлавливая такие объявления по UTM меткам. Однако никто не мешает отлавливать все ошибочные страницы с GET параметрами задав в качестве правила просто *.

Основная доработка это конечно добавление CMP страницы для приложения, где теперь можно просматривать все отловленные страницы. В БД попадают полный адрес страницы, полный список URL параметров, с которыми страница была запрошена, отловленные URL параметры по маске и маска, по которой проходил отлов. Так же сохраняются IP и временная метка. Возможно буду добавлять еще User-Agent, но мне он не кажется пока не очень важным.

Возможность отправлять уведомления на почту или логировать отловленные страницы со всеми данными сохраняется. Если есть необходимость, есть вожно использовать все три вида отлова одновременно. Так же сохраняется возможность задавать шаблоны тела письма и лог сообщения, под свои нужды.

Из интересного, в ходе разработки обнаружил, что классе modRequest, который доступен нам практически с самого начала через переменную $modx->request, существует метод getClientIp(). Метод используется для определения IP адреса посетителя, однако обладает интересной особенностью. Он возвращает не только предполагаемый IP адрес посетителя, но так же массив возможных исходных IP адресов, при использовании прокси. Ранее с этим методом не сталкивался, поэтому если кто решит получать IP посетителя, то можно воспользоваться этим встроенным методом или посмотреть мою обертку к нему.

function getRemote() {	global $modx;	$remotes = $modx->request->getClientIp();	if (count($remotes['suspected']) > 1) {	$ip = $remotes['suspected'][0];	} else {	$ip = $remotes['ip'];	}	if (!filter_var($ip, FILTER_VALIDATE_IP)) {	return '127.0.0.1';	}	return $ip;
}

Суть обертки в том, что мы дополнительно проверяем полученный ip адрес на валидность и если он не валиден, возвращаем адрес локалхоста, как заведомо валидный, но неверный адрес.

Компонент доступен в официальных репозиториях. Если вдруг еще не доступен, то в ближайшее время будет.
Если будут предложения или пожелания по работе компонента, предлагайте :)

Комментарии (0)