返回首页

网站如何实现自动根据IP跳转到当地地址?

110 2024-01-19 08:34 admin

PW自身就有根据IP判断所属地区的功能,只要经常更新IP库就没什么问题.至于根据归属地跳转到相应页面就需要你自己去写了。网上帮你找了一个,看是否合适。

。<?php

//返回当前IP的城市字符串

function convertip($ip) {

//IP数据文件路径

$dat_path = 'QQWry.Dat';

//检查IP地址

if(!preg_match("/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/", $ip)) {

return 'IP Address Error';

}

//打开IP数据文件

if(!$fd = @fopen($dat_path, 'rb')){

return 'IP date file not exists or access denied';

}

//分解IP进行运算,得出整形数

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

$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

//获取IP数据索引开始和结束位置

$DataBegin = fread($fd, 4);

$DataEnd = fread($fd, 4);

$ipbegin = implode('', unpack('L', $DataBegin));

if($ipbegin < 0) $ipbegin += pow(2, 32);

$ipend = implode('', unpack('L', $DataEnd));

if($ipend < 0) $ipend += pow(2, 32);

$ipAllNum = ($ipend - $ipbegin) / 7 + 1;

$BeginNum = 0;

$EndNum = $ipAllNum;

//使用二分查找法从索引记录中搜索匹配的IP记录

while($ip1num>$ipNum || $ip2num<$ipNum) {

$Middle= intval(($EndNum + $BeginNum) / 2);

//偏移指针到索引位置读取4个字节

fseek($fd, $ipbegin + 7 * $Middle);

$ipData1 = fread($fd, 4);

if(strlen($ipData1) < 4) {

fclose($fd);

return 'System Error';

}

//提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂

$ip1num = implode('', unpack('L', $ipData1));

if($ip1num < 0) $ip1num += pow(2, 32);

//提取的长整型数大于我们IP地址则修改结束位置进行下一次循环

if($ip1num > $ipNum) {

$EndNum = $Middle;

continue;

}

//取完上一个索引后取下一个索引

$DataSeek = fread($fd, 3);

if(strlen($DataSeek) < 3) {

fclose($fd);

return 'System Error';

}

$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));

fseek($fd, $DataSeek);

$ipData2 = fread($fd, 4);

if(s

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片

网站地图 (共14个专题41565篇文章)

返回首页