判断并记录蜘蛛日志,且非蜘蛛跳转的PHP代码

下面的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代码

发表评论

欢迎 访客 发表评论

聚合全网站群程序及推送工具!

联系站长 联系客服