废话不多说,先上代码
//判断是否为爬虫 function ist_crawler() { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); $spiders = array( 'Googlebot', // Google 爬虫 'Baiduspider', // 百度爬虫 'Yahoo! Slurp', // 雅虎爬虫 'YodaoBot', // 有道爬虫 'msnbot',// Bing爬虫 '360spider',//360爬虫 'sosospider'//soso爬虫 // 更多爬虫关键字 ); foreach ($spiders as $spider) { //判断是否为爬虫 $spider = strtolower($spider); if (strpos($userAgent, $spider) !== false) { return true; } } return false; }
定义个函数,利用
$_SERVER['HTTP_USER_AGENT']
来判断是否是爬虫。中间可以添加更多的爬虫。
下面IP定位有两种代码。
一是自己下载IP地址库,到thinkPHP 的/MyApp/ORG/Net/:
if(ist_crawler()){ //如果是爬虫 //print_r($userAgent); return false; } else{ //不是爬虫 import('@.ORG.Net.IpLocation');// 导入IpLocation类 $Ip = new IpLocation('UTFWry.dat');// 实例化类 //$ipt = get_client_ip(); if(getenv("HTTP_X_FORWARDED_FOR")){ //判断是否来自代理 $ipt = getenv("HTTP_X_FORWARDED_FOR"); } else if(getenv("HTTP_CLIENT_IP")){ $ipt = getenv("HTTP_CLIENT_IP"); } else if(getenv("REMOTE_ADDR")){ //外围IP $ipt = getenv("REMOTE_ADDR"); } $area = $Ip->getlocation($ipt); //根据IP地址库信息 //print_r($area); $try = $area[country]; $try = explode("市",$try); //分割地区数组数值 $try =$try[0]; $country = explode("省",$try); $try =$country[0]; //省份 $cont = $country[1]; //市区 }
二是定义接口,可以来自淘宝,百度等。
/*** 获取 IP 地理位置* 淘宝IP接口* @Return: array */ function getCity($ip) { $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; $ip=json_decode(file_get_contents($url)); if((string)$ip->code=='1'){ return false; } $data = (array)$ip->data; return $data; } /** * 获取用户真实 IP */ function getIP() { static $realip; if (isset($_SERVER)){ if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $realip = $_SERVER["HTTP_CLIENT_IP"]; } else { $realip = $_SERVER["REMOTE_ADDR"]; } } else { if (getenv("HTTP_X_FORWARDED_FOR")){ $realip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("HTTP_CLIENT_IP")) { $realip = getenv("HTTP_CLIENT_IP"); } else { $realip = getenv("REMOTE_ADDR"); } } return $realip; } if(ist_crawler()){ $cont = "厦门市" ; return $cont; } else{ $ip = getIP(); $address = getCity($ip); $try =$address['region']; //省份 $cont = $address['city']; //市区 }
最后
$this->assign('try',$try); $this->assign('cont',$cont);
在模板输出变量就好了!