上一篇说道的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联系我。谢谢。
上一篇: PHP正则处理...
下一篇: JQ实现返回顶部...