【发布时间】:2012-11-18 13:31:02
【问题描述】:
有没有办法检测页面是否被机器人访问?
我尝试检查 $_SERVER['HTTP_USER_AGENT'] 是否在数组中。它工作正常。
$bot = array("Slurp", "Scooter", "URL_Spider_SQL", "Googlebot", "Firefly", "WebBug", "WebFindBot", "crawler", "appie", "msnbot", "InfoSeek", "FAST", "Spade", "NationalDirectory",);
if (in_array($_SERVER['HTTP_USER_AGENT'], $bot)) {
return true;
}
else {
return false;
}
有没有更好更安全的方法来做到这一点? (除了必须输入所有机器人名称之外?)我的方法和this 有什么区别?
【问题讨论】:
-
解决方案之间没有太大区别,除了另一个 1) 不是数组 2) 确保 HTTP_USER_AGENT 的值是小写的,并且与小写值进行比较。就我个人而言,我会选择你的,但添加 strtolower 方法,并将所有蜘蛛/机器人添加为小写。
-
此时请注意一点:依赖 HTTP_USER_AGENT 并不安全,因为此字符串可以设置为您想要的任何内容。还有许多可用的机器人用户代理列表。也许使用其中之一而不是建立自己的列表。
标签: php arrays user-agent bots