【原创】 IP库补丁
栏目:PHP  作者:隆航  阅读:(1463)

上一篇说道的IP库的问题,因为网友 @轮回博客 反馈说多个IP会无效,特意测试过后发现在循环的时候没有考虑周全,这里的话就不在原文章修改直接,而是用新文章来修复。

原文链接:http://loveteemo.com/article-131.html

需要修改的地方是:多个IP在控制器转换出来

if(!$common = S("common_".$id)){
$common = M('article_c')->where(array("ac_pid"=>$id))->where("ac_rtime >0")->order("ac_time desc")->limit(5)->select();
$newIp = new \Org\Util\IP();
            for ($i=0; $i < count($common); $i++) {
              $common[$i]['ip'] = getIp($common[$i]['ac_ip'],$newIp);
            }
setS("common_".$id,$common);
}

其中common为文章评论,这里是一个例子。

然后重缓存中取,如果取不到,就去很据条件查询,把查询到的IP字段进行循环处理,这里for循环前面实例化话类库文件比在for或者在函数里快。

然后把循环去处理这个 ip 字段;

把函数库的IP函数进行修改:

//根据IP转换地址
function getIp($ip,$newIp){
    if(!isset($newIp)){
    $newIp = new \Org\Util\IP();
}
    if($ip=='127.0.0.1'){
    $ads = "本机地址";
    }else{
$tmp = $newIp->find($ip);
if($tmp[1]==$tmp[2]){
$ads = $tmp[1];
}elseif($tmp[3]==''){
$ads = $tmp[1].'省'.$tmp[2].'市';
}else{
$ads = $tmp[1].'省'.$tmp[2].'市'.$tmp[3];
}
    }    
    return $ads;
}

这里就是在方法里面多加一个对象,如果不存在就实例化,存在就可以不用实例化了。

本地的话默认是 N/A 我觉得不好看就加了一个if,可以自行修改。

还有这里会出现 北京市北京市

因为函数返回的是4组参数,第一组为国家,第二组为省份没有没有省份的就出现一样,所以这里加if来处理下。

然后再模板上 {$vo.a_ip|getIp} 改为 {$vo.ip} 就可以了。

如果还有问题,可以留言或者QQ联系我。谢谢。



伊始
#107

   伊始     2015-11-04 13:53    Win 8      湖北省武汉市

那个省、市感觉没必要,输出 北京、湖北武汉 也还可以。 我的getIp是这样的: function getIP($ipnumber,$NewIP){ if(!isset($NewIP)){$NewIP = new \Org\Util\IP();} $ip = $NewIP -> find($ipnumber); if($ip=='127.0.0.1')$ads = "本机地址"; else { for ($i=1; $i < count($ip) ; $i++) { if($ip[$i] != $ip[$i-1])$ads = $ads .$ip[$i]; } } return $ads; }

隆航

   隆航     11-04 14:20    回复 @伊始 中说到:

嗯 这个是我根据项目需要自己调整了的

昵称
邮箱
域名
  记住 通知博主
验证码

  程序相关

站点版本:青春博客-V 2.1.0

开源版本:青春博客-Beta v2.0

 下载  在线支付  在线工具  在线音乐

  随机文章