Игнорирование сканеров как посетителей сайта

Когда каждая страница загружается на мой сайт, я использую тот же фрагмент кода php, чтобы добавить их в базу данных mysql в качестве новых посетителей или обновить запись в базе данных, если они уже посетили. Я использую куки, чтобы проверить, является ли посетитель новым или старым. Однако я использую приведенный ниже код, чтобы проверить, является ли он сканером, а не человеком, прежде чем выполнять мой фрагмент кода.

Однако это не работает. Я все еще получаю записи базы данных от googlebot и Facebook (поэтому всегда возвращает False?). Может кто-нибудь сказать мне, что я делаю не так?

function getIsCrawler() {
$agents = array(
"Google",
"google",
"facebook",
"Facebook",
"Bing",
"bing",
"yahoo",
"Yahoo",
"Twitter",
"twitter",
"Instagram",
"instagram");
foreach ($agents as $agent)
{
if(strpos($_SERVER['HTTP_USER_AGENT'], $agent))
{
return True;
}
}
return False;
}

$iscrawler = getIsCrawler();

if ($isCrawler == False)
{
//run php code snipit to handle visitors
}

0

Решение

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

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

Наконец, вы можете уменьшить размер массива $ agent с помощью stripos(), Это не чувствительно к делу.

function getIsCrawler($external_agent) {
$agents = array(
"Google",
"Facebook",
"Bing",
"Yahoo",
"Twitter",
"Instagram",
);
foreach ($agents as $agent)
{
if(stripos($external_agent, $agent) !== False)
{
return True;
}
}
return False;
}
1

Другие решения

Ваша заглавная буква не совпадает с именами переменных (т.е. $iscrawler против $isCrawler). Разная капитализация = разные переменные.

Подтвердить:

$X = 5;
$x = 1;
echo '<br/>' . $X;
echo '<br/>' . $x;

Это печатает

5
1
1

По вопросам рекламы [email protected]