php获取本地ip,php获取IP地址
$dat_path= ./QQWry .dat ;
如果(!preg_match(/^d{1,3}.d{1,3} .d{1,3} .d{1,3}$/,$ip)) {
返回“知识产权地址错误";
如果(!$fd=@fopen($dat_path, Rb ){
返回“知识产权日期文件不存在或访问被拒绝";
$ip=explode( . ,$ IP);
$ IP num=$ IP[0]* 16777216 $ IP[1]* 65536 $ IP[2]* 256 $ IP[3];
$DataBegin=fread($fd,4);
$DataEnd=fread($fd,4);
$ipbegin=内爆(,unpack(L ,$ data begin));
if($ipbegin 0) $ipbegin=pow(2,32);
$ipend=内爆(,解包( L ,$ DataEnd));
if($ipend 0) $ipend=pow(2,32);
$ ipAllNum=($ ipend-$ IP begin)/7 1;
$ begin num=0;
$ EndNum=$ ipAllNum
while($IP 1数量$IP数量 $IP 2数量$IP数量){
$ Middle=intval(($ EndNum $ begin num)/2);
fseek($fd,$ IP begin 7 * $ Middle);
$ipData1=fread($fd,4);
if(strlen(IP data1)4){
fclose($ FD);
返回"系统错误";
$ip1num=内爆(,解包( L ,$ IP data 1));
if($ip1num 0) $ip1num=pow(2,32);
if($ip1num $ipNum) {
$ EndNum=$ Middle
继续;
$DataSeek=fread($fd,3);
if(strlen $ DataSeek)3){
fclose($ FD);
返回"系统错误";
$DataSeek=内爆(“”,解包( L ,$ DataSeek。chr(0)));
fseek($fd,$ DataSeek);
$ipData2=fread($fd,4);
if(strlen(IP data 2)4){
fclose($ FD);
返回"系统错误";
$ip2num=内爆(,解包( L ,$ IP data 2));
if($ip2num 0) $ip2num=pow(2,32);
if($ip2num $ipNum) {
if($Middle==$BeginNum) {
fclose($ FD);
返回"未知";
$ BeginNum=$ Middle
$ipFlag=fread($fd,1);
if($ipFlag==chr(1)) {
$ipSeek=fread($fd,3);
if(strlen $ ipSeek)3){
fclose($ FD);
返回"系统错误";
$ipSeek=内爆(“”,解包( L ,$ ipSeek。chr(0)));
fseek($fd,$ ipSeek);
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)) {
$AddrSeek=fread($fd,3);
if(strlen($AddrSeek) 3) {
fclose($ FD);
返回"系统错误";
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)) {
$AddrSeek2=fread($fd,3);
if(strlen $ addrseek 2)3){
fclose($ FD);
返回"系统错误";
$AddrSeek2=内爆(,解包( L ,$ addrseek 2。chr(0)));
fseek($fd,$ addrseek 2);
}否则{
fseek($fd,-1,SEEK _ CUR);
while(($char=fread($fd,1))!=chr(0))
$ipAddr2 .=$ char
$AddrSeek=内爆(“”,解包( L ,$ AddrSeek。chr(0)));
fseek($fd,$ AddrSeek);
while(($char=fread($fd,1))!=chr(0))
$ipAddr1 .=$ char
}否则{
fseek($fd,-1,SEEK _ CUR);
while(($char=fread($fd,1))!=chr(0))
$ipAddr1 .=$ char
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)) {
$AddrSeek2=fread($fd,3);
if(strlen $ addrseek 2)3){
fclose($ FD);
返回"系统错误";
$AddrSeek2=内爆(,解包( L ,$ addrseek 2。chr(0)));
fseek($fd,$ addrseek 2);
}否则{
fseek($fd,-1,SEEK _ CUR);
while(($char=fread($fd,1))!=chr(0)){
$ipAddr2 .=$ char
fclose($ FD);
if(preg_match(/http/i ,$ipAddr2)) {
$ IP addr 2=
$ IP addr= $ IP addr 1 $ IP addr 2
$ipaddr=preg_replace(/CZ88 .NET/is ,,$ IP addr);
$ IP addr=preg_replace(/^s*/is,",$ IP addr);
$ipaddr=preg_replace(/s*$/is ,,$ IP addr);
if(preg_match(/http/i ,$ipaddr) $ipaddr==) {
$ipaddr=未知;
返回$ ipaddr
只要调用此方法,传入一个正确的互联网协议(互联网协议)地址,就能得到纯真互联网协议(互联网协议)数据库中相对应的地理位置了
注:写有此方法的文件需和纯真数据库文件(QQWry .Dat)放在同一级目录,否则就需要修改$dat_path的内容。
准备工作:
建议本地互联网协议(互联网协议)地址数据库,请到http://www.cz88.net/这个网站下载一个纯真互联网协议(互联网协议)数据库,安装完成后,到安装目录里把QQWry.dat文件取出来,这个就是我们想要的互联网协议(互联网协议)数据库了,放到你想要目录下。