php根据ip地址查地区

php根据ip地址查地区,第1张

自己以前做过一个程序 根据discuz里面的ip查询改的

/

ip地址所属地区计算

修改自 discuz

使用dicuz tinyipdata数据文件

将一些英文提示修改为汉字

$is_simple true的话显示到市 false显示到网通电信等等

/

function convertip($ip,$is_simple=true,$ipfile='include/data/ipdat') {

$return = '';

if( !file_exists($ipfile) ) $ipfile = '/'$ipfile;

if(preg_match("/^\d{1,3}\\d{1,3}\\d{1,3}\\d{1,3}$/", $ip)) {

$iparray = explode('', $ip);

if($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1] <= 31))) {

return '局域网';

} elseif($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255) {

return 'ERR';

} elseif($is_simple) {

return change_simply_area(convertip_tiny($ip, $ipfile));

}

else {

return convertip_tiny($ip, $ipfile);

}

}

}

/

从ip文件得到ip所属地区

过滤掉了具体的位置(如 网通/电信/网吧) 基本到市

/

function convertip_tiny($ip, $ipdatafile) {

static $fp = NULL, $offset = array(), $index = NULL;

$ipdot = explode('', $ip);

$ip = pack('N', ip2long($ip));

$ipdot[0] = (int)$ipdot[0];

$ipdot[1] = (int)$ipdot[1];

if($fp === NULL && $fp = @fopen($ipdatafile, 'rb')) {

$offset = unpack('Nlen', fread($fp, 4));

$index = fread($fp, $offset['len'] - 4);

} elseif($fp == FALSE) {

return '- Invalid IP data file';

}

$length = $offset['len'] - 1028;

$start = unpack('Vlen', $index[$ipdot[0] 4] $index[$ipdot[0] 4 + 1] $index[$ipdot[0] 4 + 2] $index[$ipdot[0] 4 + 3]);

for ($start = $start['len'] 8 + 1024; $start < $length; $start += 8) {

if ($index{$start} $index{$start + 1} $index{$start + 2} $index{$start + 3} >= $ip) {

$index_offset = unpack('Vlen', $index{$start + 4} $index{$start + 5} $index{$start + 6} "\x0");

$index_length = unpack('Clen', $index{$start + 7});

break;

}

}

fseek($fp, $offset['len'] + $index_offset['len'] - 1024);

if($index_length['len']) {

return mb_convert_encoding(fread($fp, $index_length['len']),'utf-8','gb2312'); //将读出的gb编码数据转成utf-8并返回

} else {

return '未知';

}

}

function change_simply_area($area) {

$tmp = explode(' ',$area); //过滤掉一些具体信息

return $tmp[0];

}

里面那个ipfile你可以去下载一个discuz 在 ipdata目录里面有wrydat的文件就是了 其实这个就是网上用的最多的那个纯真版数据库 很多显示ip的qq用的也是那个

这两个函数的原型参考 discuz 里面 include\miscfuncphp

共同学习进步 :)

//php获取ip的算法

if ($>

以上就是关于php根据ip地址查地区全部的内容,包括:php根据ip地址查地区、php获取客户端IP地址的几种方法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9615735.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存