Когда каждая страница загружается на мой сайт, я использую тот же фрагмент кода 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
}
Есть пара вещей, на которые вы, вероятно, захотите взглянуть. Во-первых, вы можете упростить тестирование этой функции, передав ей значения. Передача значений устраняет тесную связь между этой функцией и веб-страницами.
Во-вторых, 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;
}
Ваша заглавная буква не совпадает с именами переменных (т.е. $iscrawler
против $isCrawler
). Разная капитализация = разные переменные.
Подтвердить:
$X = 5;
$x = 1;
echo '<br/>' . $X;
echo '<br/>' . $x;
Это печатает
5
1