2012-11-30 62 views
1

有沒有辦法檢測這個頁面是否被bot訪問?我試過檢查$_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

除了另一個1)不是數組2)確保HTTP_USER_AGENT的值是小寫字母並與小寫值比較。就我個人而言,我會和你一起去,但添加strtolower方法,並將所有的蜘蛛/機器人添加爲小寫。 – Dale

+0

現在只需要注意一點:依靠HTTP_USER_AGENT並不安全,因爲此字符串可以設置爲任何您想要的。還有很多可用的bot使用者名單。也許使用其中之一而不是建立自己的列表。 – Alex2php

回答

1

好吧,在Google裏面挖了一些之後,我發現了這個。

$agent = strpos(strtolower($_SERVER['HTTP_USER_AGENT'])); 
foreach($bots as $name => $bot) 
{ 
    if(stripos($agent,$bot)!==false) 
    { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

感謝您的支持戴爾!

0

看着Sid的回答,並用Google搜索this site找到其他方法來檢測。看看:

function detect_is_bot() { 
    $bots = array("Slurp", "Scooter", "URL_Spider_SQL", "Googlebot", "Firefly", "WebBug", "WebFindBot", "crawler", "appie", "msnbot", "InfoSeek", "FAST", "Spade", "NationalDirectory",); 
    $agent = strtolower($_SERVER['HTTP_USER_AGENT']); 
    foreach($bots as $bot) { 
     if(stripos($agent,$bot)!==false) {return true;} 
    } 
    return false; 
}