因为根据IP找所在地是一个常规需求,ThinkPHP 也集成了这个工具,只不过要自己上传IP地址库 网上比较流行用纯真地址库,去下载一个,拷贝出QQWry.dat 出来即可
根据ThinkPHP的要求,默认情况下,我们需要将QQWry.Dat放入 ThinkPHP/Extend/Library/ORG/Net 这个目录下,当然如果说你已经把这个目录底下的IpLocation.class.php放在其他地方 比如@ 那级目录,只需要使qqwrt在同级目录下即可
之后由于qqwrt 是gbk 编码,thinkphp默认是utf-8 所以需要转换一下,送出代码
<?php class IPLocationHelper{ static $IpLocation; public static function getUrlInfo($url){ $ip = gethostbyname(self::fix($url)); return self::getIpInfo($ip); } private static function fix($url){ if(strpos($url,"http://")!==false){ $url = str_replace("http://","",$url); } if(strpos($url,"/")!==false){ $tmp= explode("/", $url); $url = $tmp[0]; } return $url; } public static function getIpInfo($ip){ import("ORG.Net.IpLocation"); if(empty(self::$IpLocation)){ self::$IpLocation = new IpLocation('qqwry.dat'); } $infos=self::$IpLocation->getlocation($ip); $infos['country'] = iconv('gbk','utf-8',$infos['country']); $infos['area'] = iconv('gbk','utf-8',$infos['area']); return $infos; } }
之后最后部署的时候一定要注意qqwrt.dat的大小写问题,本人最初在windows下开发,顺利解析出ip,但是一放到linux 下就不行,最开始以为是权限问题,最后发现,源代码中写的是QQWrt.dat 文件则是qqwrt.dat 所以一直查不到,希望其他人别再犯这个基本错误