tyomniy

tyomniy
Рейтинг
13
Регистрация
17.07.2011
87971a

navolnah.com

na-volnah.com

napeske.com

vpeske.com

nalugu.com

mirremonta:
Подскажите как распознать робота? По IP если да то какие адреса.

Лично я для себя написал такую функцию (возможно это не рационально для сервера, но все же...):

/*

СОЗДАЕМ В БАЗЕ ТАБЛИЦУ

CREATE TABLE IF NOT EXISTS `bots` (

`bot_id` int(100) NOT NULL AUTO_INCREMENT,

`bot_name` varchar(30) NOT NULL,

`bot_page` varchar(30) NOT NULL,

`bot_date` datetime NOT NULL,

PRIMARY KEY (`bot_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

*/

// ДАЛЕЕ В ФАЙЛ ПОДКЛЮЧЕНИЯ К БАЗЕ ВНИЗУ ДОБАВЛЯЕМ:

// ПЕРЕМЕННЫЕ ДЛЯ ЗАПРОСОВ К БАЗЕ ДАННЫХ

$page = ""; // это переменная имени страницы, вы можете передавать ее любым способом

$query = "mysql_query";

$num_rows = "mysql_num_rows";

$assoc = "mysql_fetch_assoc";

// вычислить бота и записать в базу

$user_agent = $_SERVER['HTTP_USER_AGENT'];

// массив имен ботов (не рекомендуется более 5 имен)

$bot_name = Array("Googlebot", "Yandex", "MSNBot", "Mail.Ru");

// разворачиваем массив для проверки

foreach ($bot_name as $bots){

// функция проверки и записи в базу

check_bots($user_agent, $bots);

}

// вычисляем ботов

function check_bots($user_agent, $bot_name){

global $page, $query, $num_rows;

if(strpos($user_agent, $bot_name)!==false){

// проверим есть ли такая страница на сегодня

$day = date("Y m d");

// подготовим запрос

$sql = "SELECT bot_page

FROM bots

WHERE bot_name = '$bot_name'

AND bot_page = '$page'

AND DATE_FORMAT(bot_date, '%Y %m %d') = '$day'

LIMIT 1";

// вполним запрос

$check_query = $query($sql);

// если такая страница и бот уже есть то обновим

if($num_rows($check_query)!=false){

// подготовим запрос

$sql = "UPDATE bots SET bot_date = NOW()

WHERE bot_name = '$bot_name'

AND bot_page = '$page'

AND DATE_FORMAT(bot_date, '%Y %m %d') = '$day'

LIMIT 1";

// вполним запрос

$query($sql);

// если нет то добавим

}else{

$sql = "INSERT INTO bots (bot_id, bot_name, bot_page, bot_date) VALUE ('', '$bot_name', '$page', NOW())";

$query($sql);

}

}

}

// ТЕПЕРЬ ПРОСТО ПОЛУЧАЕМ СПИСОК БОТОВ, КОТОРЫХ ЗАСЕК НАШ СКРИПТ:

// показать ботов постранично

function bots_list($start, $limit){

global $query, $assoc;

global $dateformat, $offset;

$sql = "SELECT * FROM bots ORDER BY bot_id DESC LIMIT $start, $limit";

$bots_list_query = $query($sql);

while($row = $assoc($bots_list_query)){

$bots_list[] = Array('bot_id' => $row[bot_id],

'bot_name' => $row[bot_name],

'bot_page' => $row[bot_page],

'bot_date' => gmdate($dateformat, strtotime($row[bot_date])+$offset)

);

}

return $bots_list;

}

// ВЫЗЫВАЕМ ФУНКЦИЮ СПИСКА БОТОВ:

$bots_page = 100; // сколько последних ботов показать?

$bots_list = bots_list(0, $bots_page);

// ДАЛЕЕ РАЗВОРАЧИВАЕМ МАССИВ

foreach($bots_list as $bots){

print "$bots['bot_id'] $bots['bot_name'] $bots['bot_page'] $bots['bot_date']<br>";

}

// РЕЗУЛЬТАТ У МЕНЯ ТАКОЙ:

ИД входа Имя бота Страница Дата входа Опции

13 Googlebot users 22.04.2012 - в 11 час. 52 мин. Удалить

12 Yandex users 22.04.2012 - в 11 час. 46 мин. Удалить

11 Googlebot search 22.04.2012 - в 11 час. 27 мин. Удалить

10 Googlebot user_mobile 22.04.2012 - в 11 час. 52 мин. Удалить

9 Googlebot 404 22.04.2012 - в 11 час. 38 мин. Удалить

7 Yandex top 22.04.2012 - в 11 час. 05 мин. Удалить

Привет, если еще интересно, давай обсудим в ICQ 4279828. Есть готовое решение встроенное в мой движок клона мамбы. Сам двиг можешь приобрести здесь