php爬虫检测

时间:2009-07-24 09:57:04

标签: php web-crawler

我正在尝试编写一个sitemap.php,其行为取决于看谁。

我想将抓取工具重定向到我的sitemap.xml,因为这将是最新的页面,并且将包含他们需要的所有信息,但我希望我的常规读者在php页面上显示html站点地图。

这将全部在php标题内进行控制,我在网上找到this code,看起来应该有效,但事实并非如此。任何人都可以帮我解决这个问题吗?

function getIsCrawler($userAgent) {
    $crawlers = 'firefox|Google|msnbot|Rambler|Yahoo|AbachoBOT|accoona|' .
    'AcioRobot|ASPSeek|CocoCrawler|Dumbot|FAST-WebCrawler|' .
    'GeonaBot|Gigabot|Lycos|MSRBOT|Scooter|AltaVista|IDBot|eStyle|Scrubby';
    $isCrawler = (preg_match("/$crawlers/i", $userAgent) > 0);
    return $isCrawler;
}

$iscrawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']);

if ($isCrawler) {
    header('Location: http://www.website.com/sitemap.xml');
    exit;
} else {
    echo "not crawler!";
}

它看起来很简单,但是你可以看到我已经将firefox添加到代理列表中了,果然我没有被重定向..

感谢您的帮助:)

2 个答案:

答案 0 :(得分:11)

您的代码中有错误:

$crawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']);

应该是

$isCrawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']);

如果您发布了通知,那么您将更容易发现这些错误。

此外,您可能希望在exit

之后header

警告隐藏会让搜索提供商遇到麻烦。 This article解释了原因。

答案 1 :(得分:1)