废话不多说,先上代码
//判断是否为爬虫
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);
在模板输出变量就好了!