18842388900

网站建设 APP开发 小程序

Article/文章

记录成长点滴 分享您我感悟

您当前位置>首页 > 知识 > 网站建设

PHP通过IP

获取当前城市 PHP获取IP地址

这个比较简单,你可以使用PHP自带的函数,PHP中文手册看看,有现成的例子,但更多的解释,直接就代码,

A部分:

$ xp_UserIp=($ _ SERVER ['HTTP_VIA'])?$ _ SERVER ['HTTP_X_FORWARDED_FOR']: $ _SERVER ['REMOTE_ADDR'];

$ xp_UserIp=($ xp_UserIp)?$ xp_UserIp: $ _SERVER ['REMOTE_ADDR'];>PHP通过IP地址判断用户所在城市

上面已经获得了用户IP地址,然后我们根据该IP地址获取用户的城市。在我们开始之前,我们需要下载一个现成的数据库QQIP数据库。

附:最新腾讯QQIP数据库2011.04.10纯版下载

用法:解压后QQWry.Dat是我们想要IP地址的数据库,我们创建一个新的ipcity文件夹,把数据库放在下面。 QQIP数据库使用起来非常方便,数据也很齐全,可以及时关注官方更新,保持数据最新,强烈推荐它:)

接下来,我们在上面的ipcity目录中创建一个新的ipaddress.php文件,直接复制以下代码,并评论重要的地方。

B节:

/*函数名称:ipCity

参数说明:$ userip——用户IP地址

功能:PHP通过IP地址判断用户的城市

作者:杰森

联系: admin@sslook.com */

functionipCity($ USERIP){

//IP数据库路径,这里是QQIP数据库20110405纯版

$ dat_path=” QQWry.dat”;

//确定IP地址是否有效

如果(!EREG( “^([0-9] {1,3})。{3} [0-9] {1,3} $”,$ USERIP)){

Return'IPAddressInvalid”;

}

//打开IP数据库

如果(!$ FD=@的fopen($ dat_path,” RB”)){

Return'IPdatafilenotexistsoraccessdenied”;

}

//explode函数分解IP地址并计算整数形状的结果

$ USERIP=爆炸(,$ USERIP“”);

$ useripNum=$ USERIP [0] * 16777216 + $ USERIP [1] * 65536 + $ USERIP [2] * 256 + $ USERIP [3];

//获取IP地址索引的开始和结束位置

$ DataBegin=的fread($ FD,4);

$ DATAEND=的fread($ FD,4);

$ useripbegin=破灭(”解包(‘L’,$ DataBegin));

如果($ useripbegin℃,)$ useripbegin +=POW(2,32);

$ useripend=破灭(”解包(‘L’,$ DATAEND));

如果($ useripend℃,)$ useripend +=POW(2,32);

$ useripAllNum=($ $ useripend- useripbegin)/7 + 1;

$ BeginNum=0;

$ EndNum=$ useripAllNum;

//使用二进制搜索方法从索引记录中搜索匹配的IP地址记录

而($ userip1num> $ useripNum || $ userip2num< $ useripNum){

$中东=INTVAL(($ EndNum + $ BeginNum)/2);

//将索引位置的偏移指针读取为4个字节

FSEEK($ FD,$ useripbegin + 7 * $中);

$ useripData1=的fread($ FD,4);

如果(strlen的($ useripData1)LT; 4){<>

FCLOSE($ FD);

return'FileError”;

}

//提取数据转换增长整形,如果数据为负,则再加2到32次幂

$ userip1num=破灭(”解包(‘L’,$ useripData1));

如果($ userip1num℃,)$ userip1num +=POW(2,32);

//提取的长整数的数量大于我们的IP地址,并且为下一个循环修改结束位置

如果($ userip1num> $ useripNum){

$ EndNum=$中东;

继续;

}

//在取得上一个索引后取最后一个索引

$ DataSeek=的fread($ FD,3);

如果(strlen的($ DataSeek)LT; 3){<>

FCLOSE($ FD);

return'FileError”;

}

$ DataSeek=破灭(”解压缩(‘L’,$ DataSeek.chr(0)));

FSEEK($ FD,$ DataSeek);

$ useripData2=的fread($ FD,4);

如果(strlen的($ useripData2)LT; 4){<>

FCLOSE($ FD);

return'FileError”;

}

$ userip2num=破灭(”解包(‘L’,$ useripData2));

如果($ userip2num℃,)$ userip2num +=POW(2,32);

//找不到与IP地址对应的城市

如果($ userip2num< $ useripNum){

如果($中东==$ BeginNum){

FCLOSE($ FD);

Return'NoData”;

}

$ BeginNum=$中东;

}

}

$ useripFlag=的fread($ FD,1);

如果($ useripFlag==CHR(1)){

$ useripSeek=的fread($ FD,3);

如果(strlen的($ useripSeek)LT; 3){<>

FCLOSE($ FD);

Return'SystemError”;

}

$ useripSeek=破灭(”解压缩(‘L’,$ useripSeek.chr(0)));

FSEEK($ FD,$ useripSeek);

$ useripFlag=的fread($ FD,1);

}

如果($ useripFlag==CHR(2)){

$ AddrSeek=的fread($ FD,3);

如果(strlen的($ AddrSeek)LT; 3){<>

FCLOSE($ FD);

Return'SystemError”;

}

$ useripFlag=的fread($ FD,1);

如果($ useripFlag==CHR(2)){

$ AddrSeek2=的fread($ FD,3);

如果(strlen的($ AddrSeek2)LT; 3){<>

FCLOSE($ FD);

Return'SystemError”;

}

$ AddrSeek2=破灭(”解压缩(‘L’,$ AddrSeek2.chr(0)));

FSEEK($ FD,$ AddrSeek2);

}否则{

FSEEK($ FD,-1,SEEK_CUR);

}

而(($焦炭=的fread($ FD,1))!=CHR(0))

$ useripAddr2=$炭;

$ AddrSeek=破灭(”解压缩(‘L’,$ AddrSeek.chr(0)));

FSEEK($ FD,$ AddrSeek);

而(($焦炭=的fread($ FD,1))!=CHR(0))

$ useripAddr1=$炭;}否则{

FSEEK($ FD,-1,SEEK_CUR);

而(($焦炭=的fread($ FD,1))!=CHR(0))

$ useripAddr1=$炭;

$ useripFlag=的fread($ FD,1);

如果($ useripFlag==CHR(2)){

$ AddrSeek2=的fread($ FD,3);

如果(strlen的($ AddrSeek2)LT; 3){<>

FCLOSE($ FD);

Return'SystemError”;

}

$ AddrSeek2=破灭(”解压缩(‘L’,$ AddrSeek2.chr(0)));

FSEEK($ FD,$ AddrSeek2);

}否则{

FSEEK($ FD,-1,SEEK_CUR);

}

而(($焦炭=的fread($ FD,1))!=CHR(0)){

$ useripAddr2=$炭;

}}

FCLOSE($ FD);

//返回与IP地址对应的城市结果

如果(的preg_match(“/HTTP/I”,$ useripAddr2)){

$ useripAddr2=”;

}

$ useripaddr=” $ $ useripAddr1 useripAddr2” ;

$ useripaddr=preg_replace函数(“/CZ88.Net/is”,”,$ useripaddr);

$ useripaddr=preg_replace函数(“/^ S * /是”,”,$ useripaddr);

$ useripaddr=preg_replace函数(“/S * $ /是”,”,$ useripaddr);

如果(的preg_match(“/HTTP/I”,$ useripaddr)|| $ useripaddr==”){

$ useripaddr=”无数据”;

}

返回$ useripaddr;

}

?>

PHP根据IP地址实现城市切换或跳转

此时,问题已经非常简单,可以使用简单的js完成。

C节如下:

//根据IP地址跳转到指定的页面js来获取城市

Varcity=””;

//所有城市都根据IP地址跳转到指定页面

如果(city.indexOf( “上海”)>=0){

Window.location.href=“http://shanghai.demo.com /”;

}

将第一段A段代码和上面的C段代码放在B段代码的开头和结尾,然后我们将以下代码添加到需要跳转的页面中:

刷新页面,是否达到了预期的效果?

网站建设,小程序开发,小程序制作,微信小程序开发,公众号开发,微信公众号开发,网页设计,网站优化,网站排名,网站设计,微信小程序设计,小程序定制,微信小程序定制

相关案例查看更多