忽略爬虫作为网站的访问者
Ignoring crawlers as visitors to website
当每个页面加载到我的网站上时,我使用相同的 php 代码片段将他们作为新访问者添加到 mysql 数据库中,或者如果他们已经访问过则更新数据库条目。我使用 cookie 来检查访问者是新的还是旧的。但是,在执行我的代码片段之前,我使用下面的代码来检查它是否是爬虫而不是人类。
但是这不起作用。我仍然从 googlebot 和 Facebook 获取数据库条目(所以总是 returns 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
}
您的变量名称大小写不一致(即 $iscrawler
与 $isCrawler
)。大小写不同 = 变量不同。
确认:
$X = 5;
$x = 1;
echo '<br/>' . $X;
echo '<br/>' . $x;
它打印
5
1
您可能需要查看一些内容。首先,您可以通过向其传递值来使该函数更易于测试。传递值消除了此函数与网页之间的紧密耦合。
其次,strpos() 及其同类函数因其 return 值而臭名昭著。文档中有big red (ish) warnings。
最后,您可以使用 stripos()
减小数组 $agents 的大小。不区分大小写。
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;
}
当每个页面加载到我的网站上时,我使用相同的 php 代码片段将他们作为新访问者添加到 mysql 数据库中,或者如果他们已经访问过则更新数据库条目。我使用 cookie 来检查访问者是新的还是旧的。但是,在执行我的代码片段之前,我使用下面的代码来检查它是否是爬虫而不是人类。
但是这不起作用。我仍然从 googlebot 和 Facebook 获取数据库条目(所以总是 returns 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
}
您的变量名称大小写不一致(即 $iscrawler
与 $isCrawler
)。大小写不同 = 变量不同。
确认:
$X = 5;
$x = 1;
echo '<br/>' . $X;
echo '<br/>' . $x;
它打印
5
1
您可能需要查看一些内容。首先,您可以通过向其传递值来使该函数更易于测试。传递值消除了此函数与网页之间的紧密耦合。
其次,strpos() 及其同类函数因其 return 值而臭名昭著。文档中有big red (ish) warnings。
最后,您可以使用 stripos()
减小数组 $agents 的大小。不区分大小写。
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;
}