标签:style blog http java color 使用
PHP获取IP地址
这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段:
?
//PHP获取当前用户IP地址方法
$xp_UserIp
= ($_SERVER["HTTP_VIA"]) ?$_SERVER["HTTP_X_FORWARDED_FOR"] :$_SERVER["REMOTE_ADDR"];
$xp_UserIp
= ($xp_UserIp) ?$xp_UserIp
:$_SERVER["REMOTE_ADDR"];
?>
附:最新腾讯QQ IP数据库 2011.04.10 纯真版下载
使用方法:解压后QQWry.Dat就是我们想要IP地址数据库,我们新建一个ipcity文件夹,将数据库放在下面。QQ
IP数据库使用非常方便,数据也很齐全,你可以及时关注官方更新以保持数据最新,强力推荐一下:)
接下来,我们在上面的ipcity目录下新建一个ipaddress.php文件,直接复制以下代码进去即可,重要的地方也作了相应注释。
?
function
ipCity($userip) {
//IP数据库路径,这里用的是QQ IP数据库 20110405 纯真版
$dat_path
=‘QQWry.dat‘;
//判断IP地址是否有效
if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$",$userip)){
return
‘IP Address Invalid‘;
}
//打开IP数据库
if(!$fd
= @fopen($dat_path,‘rb‘)){
return
‘IP data file not exists or access denied‘;
}
//explode函数分解IP地址,运算得出整数形结果
$userip
=explode(‘.‘,$userip);
$useripNum
=$userip[0] * 16777216 +$userip[1] * 65536 +$userip[2] * 256 +$userip[3];
//获取IP地址索引开始和结束位置
$DataBegin
=fread($fd, 4);
$DataEnd
=fread($fd, 4);
$useripbegin
= implode(‘‘, unpack(‘L‘,$DataBegin));
if($useripbegin
$useripbegin
+= pow(2, 32);
$useripend
= implode(‘‘, unpack(‘L‘,$DataEnd));
if($useripend
$useripend
+= pow(2, 32);
$useripAllNum
= ($useripend
-$useripbegin) / 7 + 1;
$BeginNum
= 0;
$EndNum
=$useripAllNum;
//使用二分查找法从索引记录中搜索匹配的IP地址记录
while($userip1num>$useripNum
||$userip2num$useripNum) {
$Middle=intval(($EndNum
+$BeginNum) / 2);
//偏移指针到索引位置读取4个字节
fseek($fd,$useripbegin
+ 7 *$Middle);
$useripData1
=fread($fd, 4);
if(strlen($useripData1)
fclose($fd);
return
‘File Error‘;
}
//提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂
$userip1num
= implode(‘‘, unpack(‘L‘,$useripData1));
if($userip1num
$userip1num
+= pow(2, 32);
//提取的长整型数大于我们IP地址则修改结束位置进行下一次循环
if($userip1num
>$useripNum) {
$EndNum
=$Middle;
continue;
}
//取完上一个索引后取下一个索引
$DataSeek
=fread($fd, 3);
if(strlen($DataSeek)
fclose($fd);
return
‘File Error‘;
}
$DataSeek
= implode(‘‘, unpack(‘L‘,$DataSeek.chr(0)));
fseek($fd,$DataSeek);
$useripData2
=fread($fd, 4);
if(strlen($useripData2)
fclose($fd);
return
‘File Error‘;
}
$userip2num
= implode(‘‘, unpack(‘L‘,$useripData2));
if($userip2num
$userip2num
+= pow(2, 32);
//找不到IP地址对应城市
if($userip2num
$useripNum) {
if($Middle
==$BeginNum) {
fclose($fd);
return
‘No Data‘;
}
$BeginNum
=$Middle;
}
}
$useripFlag
=fread($fd, 1);
if($useripFlag
==chr(1)) {
$useripSeek
=fread($fd, 3);
if(strlen($useripSeek)
fclose($fd);
return
‘System Error‘;
}
$useripSeek
= implode(‘‘, unpack(‘L‘,$useripSeek.chr(0)));
fseek($fd,$useripSeek);
$useripFlag
=fread($fd, 1);
}
if($useripFlag
==chr(2)) {
$AddrSeek
=fread($fd, 3);
if(strlen($AddrSeek)
fclose($fd);
return
‘System Error‘;
}
$useripFlag
=fread($fd, 1);
if($useripFlag
==chr(2)) {
$AddrSeek2
=fread($fd, 3);
if(strlen($AddrSeek2)
fclose($fd);
return
‘System Error‘;
}
$AddrSeek2
= implode(‘‘, unpack(‘L‘,$AddrSeek2.chr(0)));
fseek($fd,$AddrSeek2);
}else
{
fseek($fd, -1, SEEK_CUR);
}
while(($char
=fread($fd, 1)) !=chr(0))
$useripAddr2
.=$char;
$AddrSeek
= implode(‘‘, unpack(‘L‘,$AddrSeek.chr(0)));
fseek($fd,$AddrSeek);
while(($char
=fread($fd, 1)) !=chr(0))
$useripAddr1
.=$char;
}else
{
fseek($fd, -1, SEEK_CUR);
while(($char
=fread($fd, 1)) !=chr(0))
$useripAddr1
.=$char;
$useripFlag
=fread($fd, 1);
if($useripFlag
==chr(2)) {
$AddrSeek2
=fread($fd, 3);
if(strlen($AddrSeek2)
fclose($fd);
return
‘System Error‘;
}
$AddrSeek2
= implode(‘‘, unpack(‘L‘,$AddrSeek2.chr(0)));
fseek($fd,$AddrSeek2);
}else
{
fseek($fd, -1, SEEK_CUR);
}
while(($char
=fread($fd, 1)) !=chr(0)){
$useripAddr2
.=$char;
}
}
fclose($fd);
//返回IP地址对应的城市结果
if(preg_match(‘/http/i‘,$useripAddr2)) {
$useripAddr2
=‘‘;
}
$useripaddr
="$useripAddr1 $useripAddr2";
$useripaddr
= preg_replace(‘/CZ88.Net/is‘,‘‘,$useripaddr);
$useripaddr
= preg_replace(‘/^s*/is‘,‘‘,$useripaddr);
$useripaddr
= preg_replace(‘/s*$/is‘,‘‘,$useripaddr);
if(preg_match(‘/http/i‘,$useripaddr) ||$useripaddr
==‘‘) {
$useripaddr
=‘No Data‘;
}
return
$useripaddr;
}
?>
PHP根据IP地址实现城市切换或跳转
到这里,其实问题已经很简单了,用简单的js就通通搞定。C段如下:
?
//根据IP地址跳转指定页面js取得城市
var
city=‘‘;
//根据IP地址所有城市跳转到指定页面
if(city.indexOf("上海市")>=0){
window.location.href="http://shanghai.demo.com/";
}
将开头的A段代码和上面的C段代码分别放在B段代码的头和尾,然后我们在需要跳转的页面加入以下代码:
?
type="text/javascript"
language="javascript">
刷新页面,是不是达到预想的效果了呢?
以上就是PHP获取IP地址、PHP根据IP地址判断城市以及PHP根据IP地址实现城市切换或跳转的详细介绍了,事实上,像PHP中通过IP地址自动切
换城市就是这个方法的典型应用。举一反三,我们通过这种方法,也可以实现屏蔽指定IP地址或城市的用户访问,自己研究一下吧,也挺简单的:)
原文: http://blog.sina.com.cn/s/blog_5a8b8eb80100t1je.html
PHP获取IP地址及根据IP判断城市实现城市切换或跳转,搜素材,soscw.com
PHP获取IP地址及根据IP判断城市实现城市切换或跳转
标签:style blog http java color 使用