下面的PHP代码,判断是否是蜘蛛后,如是蜘蛛,则输出为日志(bot.txt),如不是蜘蛛则进行跳转。
$useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT'])); if (strpos($useragent, 'googlebot') !== false) { $bot = 'Google'; } elseif (strpos($useragent, 'mediapartners-google') !== false) { $bot = 'Google Adsense'; } elseif (strpos($useragent, 'baiduspider') !== false) { $bot = 'Baidu'; } elseif (strpos($useragent, 'sogou spider') !== false) { $bot = 'Sogou'; } elseif (strpos($useragent, 'sogou web') !== false) { $bot = 'Sogou web'; } elseif (strpos($useragent, 'sosospider') !== false) { $bot = 'SOSO'; } elseif (strpos($useragent, '360spider') !== false) { $bot = '360Spider'; } elseif (strpos($useragent, 'yahoo') !== false) { $bot = 'Yahoo'; } elseif (strpos($useragent, 'msn') !== false) { $bot = 'MSN'; } elseif (strpos($useragent, 'msnbot') !== false) { $bot = 'msnbot'; } elseif (strpos($useragent, 'sohu') !== false) { $bot = 'Sohu'; } elseif (strpos($useragent, 'yodaoBot') !== false) { $bot = 'Yodao'; } elseif (strpos($useragent, 'twiceler') !== false) { $bot = 'Twiceler'; } elseif (strpos($useragent, 'ia_archiver') !== false) { $bot = 'Alexa_'; } elseif (strpos($useragent, 'iaarchiver') !== false) { $bot = 'Alexa'; } elseif (strpos($useragent, 'slurp') !== false) { $bot = '雅虎'; } elseif (strpos($useragent, 'yisouspider') !== false) { $bot = '神马'; } elseif (strpos($useragent, 'bot') !== false) { $bot = '其它蜘蛛'; } if (isset($bot)) { //是蜘蛛,写出日志 $fp = @fopen('bot.txt','a'); fwrite($fp,date('Y-m-d H:i:s')."\t".$_SERVER["REMOTE_ADDR"]."\t".$bot. "\t".'http://'.$_SERVER['SERVER_NAME']. $_SERVER["REQUEST_URI"]."\r\n"); fclose($fp); } else { //不是蜘蛛,直接跳转 header('Location: http://www.baidu.com/');
解析:PHP fwrite() 函数
定义和用法
fwrite() 函数写入文件(可安全用于二进制文件)。
语法
fwrite(file,string,length)
说明
fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 false。
<?php $file = fopen("test.txt","w"); echo fwrite($file,"Hello World. Testing!"); fclose($file); ?>
故如上代码输出蜘蛛记录文件bot.txt的格式是:年-月-日 蜘蛛标识 抓取链接
思路延伸
可判断如果是不需要的爬虫、设备,可返回404状态码。
if( $_SERVER['HTTP_REFERER'] == "" ) //判断规则 { header("HTTP/1.1 404 Not Found"); //返回404状态码 header("Status: 404 Not Found"); //返回404状态码 exit; }
本站所有内容仅限用于学习和研究目的,程序仅供本地断网测试,转载请说明出处!
站群SEO » 判断并记录蜘蛛日志,且非蜘蛛跳转的PHP代码
站群SEO » 判断并记录蜘蛛日志,且非蜘蛛跳转的PHP代码