PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
web PHP 2018-10-09 2270 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

6414132 2611 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

1、推荐的一种方法:php判断搜索引擎蜘蛛爬虫还是人为访问代码,摘自Discuz x3.2


<?php
functioncheckrobot($useragent=''){
static$kw_spiders=array('bot','crawl','spider','slurp','sohu-search','lycos','robozilla');
static$kw_browsers=array('msie','netscape','opera','konqueror','mozilla');
$useragent=strtolower(empty($useragent) ?$_SERVER['HTTP_USER_AGENT'] :$useragent);
if(strpos($useragent,'http://') === false && dstrpos($useragent,$kw_browsers))returnfalse;
if(dstrpos($useragent,$kw_spiders))returntrue;
returnfalse;
}
functiondstrpos($string,$arr,$returnvalue= false) {
if(empty($string))returnfalse;
foreach((array)$arras$v) {
if(strpos($string,$v) !== false) {
$return=$returnvalue?$v: true;
return$return;
}
}
returnfalse;
}
if(checkrobot()){
echo'机器人爬虫';
}else{
echo'人';
}
?>
实际应用中可以这样判断,直接不是搜索引擎才执行操作



<?php
if(!checkrobot()){
//do something
}
?>
2、第二种方法: 
使用PHP实现蜘蛛访问日志统计
$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,'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);
}


3,第三种方法:  

我们可以通过HTTP_USER_AGENT来判断是否是蜘蛛,搜索引擎的蜘蛛都有自己的独特标志,下面列取了一部分。

functionis_crawler() {
$userAgent=strtolower($_SERVER['HTTP_USER_AGENT']);
$spiders=array(
'Googlebot',// Google 爬虫
'Baiduspider',// 百度爬虫
'Yahoo! Slurp',// 雅虎爬虫
'YodaoBot',// 有道爬虫
'msnbot'// Bing爬虫
// 更多爬虫关键字
);
foreach($spidersas$spider) {
$spider=strtolower($spider);
if(strpos($userAgent,$spider) !== false) {
returntrue;
}
}
returnfalse;
}
下面的php代码附带了更多的蜘蛛标识

functionisCrawler() {
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($spiderSiteas$val) {
$str=strtolower($val);
if(strpos($agent,$str) !== false) {
returntrue;
}
}
}else{
returnfalse;
}
}
if(isCrawler()){
echo"你好蜘蛛精!";
}
else{
echo"你不是蜘蛛精啊!";
}
4,第四种方法:
<?php
$flag= false;
$tmp=$_SERVER['HTTP_USER_AGENT'];
if(strpos($tmp,'Googlebot') !== false){
$flag= true;
}elseif(strpos($tmp,'Baiduspider') >0){
$flag= true;
}elseif(strpos($tmp,'Yahoo! Slurp') !== false){
$flag= true;
}elseif(strpos($tmp,'msnbot') !== false){
$flag= true;
}elseif(strpos($tmp,'Sosospider') !== false){
$flag= true;
}elseif(strpos($tmp,'YodaoBot') !== false ||strpos($tmp,'OutfoxBot') !== false){
$flag= true;
}elseif(strpos($tmp,'Sogou web spider') !== false ||strpos($tmp,'Sogou Orion spider') !== false){
$flag= true;
}elseif(strpos($tmp,'fast-webcrawler') !== false){
$flag= true;
}elseif(strpos($tmp,'Gaisbot') !== false){
$flag= true;
}elseif(strpos($tmp,'ia_archiver') !== false){
$flag= true;
}elseif(strpos($tmp,'altavista') !== false){
$flag= true;
}elseif(strpos($tmp,'lycos_spider') !== false){
$flag= true;
}elseif(strpos($tmp,'Inktomi slurp') !== false){
$flag= true;
}
if($flag== false){
header("Location: //www.jb51.net".$_SERVER['REQUEST_URI']);
// 自动转到//www.jb51.net 对应的网页
// $_SERVER['REQUEST_URI'] 为域名后面的路径
// 或换成header("Location: //www.jb51.net/abc/d.php");
exit();
}
?>

版权声明:本篇文章来源于网络。 来源链接

相关推荐
php实现ZIP压缩文件解压缩,中文乱码解决方法(重要)
PHP | 2019-04-30 5611
直接上代码,具体代码里面都有注释。直接中文压缩文件解压到中文文件夹。 <?php // 需开启配置 php_zip.dll // phpinfo(); header("Content-type:text/html;charset=utf-8"); /* * $filename 被解压文件名 * $path 解压...
openssl_private_decrypt解密失败
PHP | 2019-01-16 5586
复制别人的解密程序,原程序可以解密,复制过来就不可以 一步步尝试发现,秘钥换行符有区别, 原秘钥有换行符,复制过来不知道什么时候把换行符清空了,成了一行字符串了。
评论:0条
评论加载中...
发表评论