PHP: Подсчет кликов — правильный путь!

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

Накрутка кликов не самый лучший момент для повышения репутации вашего сайта/блога — так как вы можете получить бан в системе с которой вы работаете , так и просто потерять хорошего партнёра по обмену ссылками. В этой статье я покажу вам , как просто и легко можно сделать вашу систему подсчета кликов безопасной от такого вида «хулиганства».

В первую очередь! Не волнуйтесь если клик не был засчитан!

Задачи и требования

Нам нужно использовать ссылки ,  которые информативны для посетителя, ссылки подобно http://www.domain.com/click.php?id=123 не показывают посетителю целевую ссылку , так что лучше использовать , что то вроде этого http://www.domain.com/browse.php?url=www.external-site.com

Первое , что нам нужно сделать — это идентифицировать нашего посетителя , чтобы щелчок ( например двойной ) по ссылке не был засчитан дважды. Мы сохраняем IP адрес посетителя и ID ссылки в базе данных.

Второе и на мой взгляд самое главное , это то , что нам требуется защитить себя от «кликающих» ботов : многие боты очень умны , они использую множество IP адресов из разных подсетей , следовательно это делает их активность  похожей на человеческую и вам кажется , что на сайт заходили разные люди. Некоторые боты заранее подгружают страницы , чтобы получить подробную информацию. Так как мы заносим IP адреса в базу , то действие бота не будет столь эффективными. Но это не освобождает вас от проверки статистики кликов ( если в какой то день с одной ссылки ушло 10 хитов , а в другой 100 , то будьте уверены , что кто то пытался накрутить систему ).

Вам нужны две таблицы в базе данных , одна таблица для ссылок и другая таблица для кликов. Первая таблица должна состоять из двух колонок , в первой хранится ID вашей ссылки , во второй хранится URL. В таблице для кликов , должны быть 3 колонки в первой хранится ID ссылки , во второй колонке хранится IP адрес и третья колонка , для временного штампа:

CREATE TABLE `links` ( `ident` INT NOT NULL, `url` VARCHAR( 100 ) NOT NULL , INDEX ( `ident` ) , UNIQUE ( `url` ) ) ENGINE = MYISAM ;
 
CREATE TABLE `clicks` ( `site_id` int(11) NOT NULL, `click_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `ip_adr` varchar(30) NOT NULL, KEY `site_id` (`site_id`) ) ENGINE=MyISAM;

После того , как мы создали две таблицы в нашей базе данных , нам требуется ввести несколько ссылок.

В тот момент , как кто то кликнет ссылку , выполняется наш сценарий перенаправления ( не забывайте PHP теги и создание подключения к базе данных ):

if (empty($_GET['url'])) {
	$url = 'http://www.yoursite.com/';
} else {
	if (get_magic_quotes_gpc()) $_GET['url'] = stripslashes($_GET['url']);
	$gURL = mysql_real_escape_string($_GET['url']);
	$result = mysql_query("SELECT ident FROM links WHERE ident = '".$gURL."'");
	if (mysql_num_rows($result) == 1) {
                $url = 'http://'.$gURL;
		$id = mysql_result($result, 0, 'ident');
		$IP = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
		$time_diff = 3600*24*14; // count ones in 14 days
		$sql = sprintf("SELECT COUNT(*) AS testval FROM clicks WHERE ip_adr = '%s' AND click_time+%d > NOW() AND site_id = %d", $IP, $time_diff, $id);
		$res = mysql_query($sql) or die(mysql_error());
		$test = mysql_result($res, 0, 'testval');
		if ($tell == 0) {
			mysql_query(sprintf("INSERT INTO clicks SET ip_adr = '%s', site_id = %d", $IP, $gURL));
		}
	} else {
		$url = 'http://www.yoursite.com/';
	}
}
header('Location: '.$url);
exit;

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

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

Постовой: Отличное решение для дизайна вашего дома , бесшовные натяжные потолки из Франции , по низким ценам.

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

Популярность: 68%

Можно также почитать:

Один комментарий

  1. gmax.kz - поиск gmax.kz - поиск пишет:

    спасибо за статью очень пригодилась

Написать комментарий

О блоге

сoderx.in - это блог о Web разработке, Web дизайне и программировании для начинающих и профессионалов в своём деле, а также о новостях и новинках в сфере IT. Практические советы и рекомендации о том, как создать, защитить и раскрутить свой сайт.