Есть маленький сайт с 10 страниц на них стоит счетчик посещений на файле через ip , боты накручивают, как избавиться от этого , как сделать если бот то проехали а если человек +1 я тут нашел какойто код но оно не работает или я не понимаю как его правильно подключить PHP: function is_bot() { if (!empty($_SERVER['HTTP_USER_AGENT'])) { $options = array( 'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn', 'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser', 'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster', 'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect', 'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika', 'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus', 'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot', 'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI', 'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google', 'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves', 'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!', 'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus', 'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks', 'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot', 'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti', 'DomainVader', 'DCPbot', 'PaperLiBot' ); foreach($options as $row) { if (stripos($_SERVER['HTTP_USER_AGENT'], $row) !== false) { return true; } } } return false; }
Просто вставить его в ваш код, куда вам надо. И, там, где хотите проверить бот или не бот пришел, пришете PHP: if (is_bot()){ //Действия для бота } else{ //Действия для человека }
Я сказал, как использовать функцию. Просто вызвать ее. Если вернет true, значит бот зашел, если false - человек. А как в ыэто поняли, куда что пишете и тд - это уже к телепатам. Код в студию.
вот так делаю все время показывает Посетитель записываю в лог на сайте пробовал вызывать ботов через яндекс шаре хотя боты заходили Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) PHP: function is_bot() { if (!empty($_SERVER['HTTP_USER_AGENT'])) { $list = array( 'vkShare','Google','VKontakte','FacebookExternalHit', 'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn', 'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser', 'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster', 'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect', 'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika', 'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus', 'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot', 'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI', 'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google', 'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves', 'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!', 'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus', 'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks', 'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot', 'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti', 'DomainVader', 'DCPbot', 'PaperLiBot' ); //$list = implode("\n", $options); foreach($list as $botname) { if (stripos($_SERVER['HTTP_USER_AGENT'], $botname) !== false) { return true; } } } return false; } if (is_bot()) {$botname = "Бот";} else {$botname = "Посетитель";}
Странно.. Логгируйте все User-агенты, а потом проверяйте, как с ними функция отрабатывает. Мб там в списке просто нет нужной метки.
А зачем их, ботов трогать? Защита от визуальной накрутки счетчиков, вот такими вот блокираторами, может привести к печальным последствиям для сайта, т.к. отфильтровать всех ботов вы явно не сможете ибо не всё так просто, а вот получить нагоняй от гугла или яндекса за такие деяния вполне реально!
Да ну. На счётчик и гуглу и яндексу плевать, нагоняй - это если боту совсем другой контент выдавать, чем обычному посетителю.
За какие? За то, что при их посещении где-то в недрах БД счетчик не увеличился на единичку? Им на это плевать. Им не плевать, когда ты ботам и людям разные страницы отдаешь. Прям вот совсем разные.
немогу сделать какой бот приходил $botname; получилось $botname="Бот"; пишет просто бот а хотелось чтоб в лог писать какой бот чтоб отследить боты там яндекс и вгугле и тд а отстальных банить чтоли --- Добавлено --- всмысле
Так у тебя переменная $botname сначала с именем бота из массива, переписывается $botname = "бот" вот тут переименуйте переменную $botname: PHP: if (is_bot()) {$botname = "Бот";} else {$botname = "Посетитель";} или в самом начале, чтоб она не переписывалась новым значением
Извиняюсь, у вас же это собственная функция, вы тогда в самой функции возвращайте не TRUE/FALSE, а имя бота или FALSE
аааа как намудрить чтоб имя бота показало и как еще тот арай в файл запихнуть и оттуда читать подскажите
Как то так: PHP: function is_bot() { if (!empty($_SERVER['HTTP_USER_AGENT'])) { $list = array( 'vkShare','Google','VKontakte','FacebookExternalHit', 'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn', 'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser', 'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster', 'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect', 'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika', 'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus', 'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot', 'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI', 'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google', 'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves', 'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!', 'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus', 'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks', 'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot', 'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti', 'DomainVader', 'DCPbot', 'PaperLiBot' ); foreach($list as $key => $botname) { if (stripos($_SERVER['HTTP_USER_AGENT'], $botname) !== false) { return $list[$key]; // получаем имя бота из массива } } } return false; } $name = is_bot(); if ($name) { $botname = "Бот : ".$name ; } else { $botname = "Посетитель"; }
А зачем? Но если очень нужно то вот так: Создайте имя файла: botNmaes.dat в нем с новой строки напишите имена ботов, вот так: vkShare Google VKontakte acebookExternalHit и т.д. напишите строку кода: вместо массива PHP: $list = file("./botNames.dat", FILE_IGNORE_NEW_LINES); Но я думаю это лишнее, т.к. я бы вообще поставил бы и проверку на доступность/существование файла, раз уж бы его читаем, кроме всего этого и время на выполнение скрипта уже будет больше. Массивчик то маленький.
я вот так делал PHP: $list = file("data/bot.dat"); $result = array(); foreach($list as $key => $botname) { if (stripos($_SERVER['HTTP_USER_AGENT'], $botname) !== false) { return $result[$list[$key]]; // получаем имя бота из массива } } } return false; } --- Добавлено --- @AlexandrS и еще если вас не затруднит хочу записывать в тот файл из админки через пост , вот подскажите как сделать если в файле скажем есть уже гуглебот чтоб не повторялись строки
Не совсем понял вопроса "через пост" - это "через POST"? Ну а чтоб дублей не было, нужно прочитать содержимое файла в массив и проверить есть ли такое значение в массиве через in_array(). Как то так.
есть маленькая админка и чтоб потом когда найду бота ну чтоб не искать в файле азаписать в админке через форму как проверять если есть такая запись
Вроде, как человек, не сказал, что он будет делать с этими ботами, если прятать счетчик, это одно, а если показывать боту пустую страницу либо редиректить, то это другое. Поэтому я и предупредил, человека, что за не правильное обращение с ботами, можно получить нагоняй. Как говорится "Предупрежден, значит вооружен." А там уже дело каждого.