传统的判断是否是蜘蛛,是根据请求的user-agent
那蜘蛛的一般是:
function isRobot() { // echo $agent= strtolower($_SERVER['HTTP_USER_AGENT']); if (!empty($agent)) { $spiderSite= array( "TencentTraveler", "Baiduspider", "BaiduGame", "Googlebot", "msnbot", "Sosospider+", "Sogou web spider", "ia_archiver", "Yahoo! Slurp", "YoudaoBot", "Yahoo Slurp", "MSNBot", "Java (Often spam bot)", "BaiDuSpider", "Voila", "Yandex bot", "BSpider", "twiceler", "Sogou Spider", "Speedy Spider", "Google AdSense", "Heritrix", "Python-urllib", "Alexa (IA Archiver)", "Ask", "Exabot", "Custo", "OutfoxBot/YodaoBot", "yacy", "SurveyBot", "legs", "lwp-trivial", "Nutch", "StackRambler", "The web archive (IA Archiver)", "Perl tool", "MJ12bot", "Netcraft", "MSIECrawler", "WGet tools", "larbin", "Fish search", ); foreach($spiderSite as $val) { $str = strtolower($val); if (strpos($agent, $str) !== false) { return true; } } } else { return false; } }
但是header是可以伪造的,所以并不保险。所以三叔整理IP段:
function isRobotIP($ip) { // echo $agent= strtolower($_SERVER['HTTP_USER_AGENT']); if (!empty($ip)) { $spiderSite= array( '123.125.', '220.181.', '121.14.', '203.208.', '210.72.', '125.90.', '218.0.', '216.239.', '64.233.', '66.102.', '66.249.', '72.14.', '202.101.', '222.73.', '66.249.65.', '101.226.', '180.153.', '182.118.', '61.55.', '101.', '123.126.', '218.30.', '61.135.', '42.156.', '42.120.', '202.106.', '202.108.', '222.185.', '65.54.', '207.46.', '207.68.', '219.133.', '202.96.', '202.104.', '219.142.', '66.196.', '68.142.', '72.30.', '74.6.', '202.165.', '202.160.', ); foreach($spiderSite as $val) { if (startWith($ip, $val)) { return true; } } } else { return false; } }
这样就安全多了!!!
原创申明:本文章为三叔原创。