обнаружить бота с помощью php

1

У меня есть страница index.php, и у меня есть скрипт для обнаружения бота, но он работает неправильно. Если бот посещает index.php, тогда я хочу включить welcome.php. Если это оригинальный пользователь, то welcome.php не следует включать. Это то, что я пробовал до сих пор:

   function is_bot(){
   $botlist = array("Teoma", "alexa", "froogle", "Gigabot", "inktomi",
    "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory",
    "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot",
    "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp",
    "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz",
    "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot",
    "Mediapartners-Google", "Sogou web spider", "WebAlta 
     Crawler","TweetmemeBot", "Butterfly", "Twitturls", "Me.dium", 
     "Twiceler", "Purebot", "facebookexternalhit",
    "Yandex", "CatchBot", "W3C_Validator", "Jigsaw","PostRank", 
    "Purebot", "Twitterbot",
    "Voyager", "zelist", "pingdom", "favicon");

   foreach($botlist as $bot){
    if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
    return true;    // Is a bot
    }
   return false;    // Not a bot
    }

Вот основная проблема, которую я получаю - следующее не сработало:

  if (is_bot()==true) {
session_destroy(); include_once('welcome.php'); exit; }

Затем я попробовал это, но это также не сработало:

  if (is_bot()) {
  session_destroy(); include_once('welcome.php'); exit; }

Просьба сообщить о любых решениях для этой ситуации.

Всякий раз, когда я использую это, он работает

 if (is_bot())
 $isbot = 1;
 else
 $isbot = 0;
  • 0
    Вы получаете какие-либо сообщения об ошибках (например, welcome.php не найден)?
  • 0
    Что именно "не сработало". Вы получили сообщение об ошибке PHP? Вы получили неожиданный результат? Если так, что вы хотели, какой результат вы получили? Например, для запроса с «Twitterbot» в пользовательском агенте я ожидал истины, но получил ложь. Помогите нам помочь вам.
Показать ещё 6 комментариев
Теги:
bots

2 ответа

3

Лучше улучшить вашу функцию is_bot и использовать регулярное выражение вместо длительного беспокойного поиска.

Что-то вроде ниже может быть более полезным.

function is_bot(){
    preg_match('/bot|curl|spider|google|twitter^$/i', $_SERVER['HTTP_USER_AGENT'], $matches);

    return (empty($matches)) ? false : true;
}
  • 0
    спасибо имран и бенджи
  • 0
    @ Сагар Сингх, ты заставил его работать?
Показать ещё 4 комментария
1

Я уверен, что проблема в том, что код действительно работает (хотя он плохо оптимизирован и отформатирован - решение @Imran намного чище), но вы его неправильно тестируете.

Ваша строка UA не содержит строку "бот" - вы не являетесь сервером. Используйте инструмент Google Chrome dev, например;

  1. F12

  2. CTRL + SHIFT + M

  3. UA вверху и измените строку UA, чтобы притвориться кем-то другим, например, "Googlebot", а затем протестируйте его.

Просто посетив веб-сайт и вернувшись к нему, вы не подражаете "бот-запросу" с этого сайта, это все равно только вы!

  • 0
    Вы повторили код ОП. if() не имеет открывающего { , поэтому } после истинного возврата завершает foreach. считать скобки. у вас есть 2x { и 3x } - например, синтаксическая ошибка.
  • 0
    Вы правы, пропустили это, спасибо
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню