
本文操作环境:windows7系统、PHP7.1版、DELL G3电脑
php将IP地址转换为真实地址的方法
方法使用示例如下
define('WEB_ROOT',dirname(__FILE__));
echo convertip('111.63.244.69','full');
func convertip
function convertip($ip,$integrity='simple'){
$return='';
$integrity=in_array($integrity,array('simple','full'))?$integrity:'simple';
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 = '- LAN';
}elseif($iparray[0]>255||$iparray[1]>255||$iparray[2]>255||$iparray[3]>255){
$return='- Invalid IP Address';
}else{
$tinyipfile=WEB_ROOT.'./tinyipdata.dat';//IP==地址数据包精简版
$fullipfile=WEB_ROOT.'./wry.dat';//IP==地址数据包完整版
if($integrity=='simple'&&@file_exists($tinyipfile)){
$return=convertip_tiny($ip,$tinyipfile);
}elseif(@file_exists($fullipfile)){
$return=convertip_full($ip,$fullipfile);
}
}
}
return $return;
}
func convertip_tiny
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 '- '.@fread($fp,$index_length['len']);
}else{
return '- Unknown';
}
}
func convertip_full
function convertip_full($ip,$ipdatafile){
if(!$fd=@fopen($ipdatafile,'rb')){
return '- Invalid IP data file';
}
$ip=explode('.',$ip);
$ipNum=$ip[0]*16777216+$ip[1]*65536+$ip[2]*256+$ip[3];
if(!($DataBegin=fread($fd,4))||!($DataEnd=fread($fd,4))) return;
@$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=$ip2num=$ip1num=0;
$ipAddr1=$ipAddr2='';
$EndNum=$ipAllNum;
while($ip1num>$ipNum||$ip2num<$ipNum){
$Middle= intval(($EndNum+$BeginNum)/2);
fseek($fd,$ipbegin+7*$Middle);
$ipData1=fread($fd,4);
if(strlen($ipData1)<4){
fclose($fd);
return '- System Error';
}
$ip1num=implode('',unpack('L',$ipData1));
if($ip1num<0) $ip1num+=pow(2,32);
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(strlen($ipData2)<4){
fclose($fd);
return '- System Error';
}
$ip2num=implode('',unpack('L',$ipData2));
if($ip2num<0) $ip2num+=pow(2,32);
if($ip2num<$ipNum){
if($Middle==$BeginNum){
fclose($fd);
return '- Unknown';
}
$BeginNum=$Middle;
}
}
$ipFlag=fread($fd,1);
if($ipFlag==chr(1)){
$ipSeek=fread($fd,3);
if(strlen($ipSeek)<3){
fclose($fd);
return '- System Error';
}
$ipSeek=implode('',unpack('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);
return '- System Error';
}
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)){
$AddrSeek2=fread($fd,3);
if(strlen($AddrSeek2)<3){
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))
$ipAddr2 .= $char;
$AddrSeek=implode('',unpack('L',$AddrSeek.chr(0)));
fseek($fd,$AddrSeek);
while(($char=fread($fd,1)) != chr(0))
$ipAddr1 .= $char;
}else{
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($AddrSeek2)<3){
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))
$ipAddr2 .= $char;
}
fclose($fd);
if(preg_match('/http/i',$ipAddr2)){
$ipAddr2='';
}
$ipaddr="$ipAddr1 $ipAddr2";
$ipaddr=preg_replace('/CZ88\.NET/is','',$ipaddr);
$ipaddr=preg_replace('/^\s*/is','',$ipaddr);
$ipaddr=preg_replace('/\s*$/is','',$ipaddr);
if(preg_match('/http/i',$ipaddr)||$ipaddr==''){
$ipaddr='- Unknown';
}
return '- '.$ipaddr;
}
推荐学习:《PHP视频教程》
以上就是php 如何将ip地址转换成真实地址代码的详细内容,更多请关注亿码酷站其它相关文章!
<!–
–>php 如何将ip地址转换成真实地址代码
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除
转载请注明来源:php 如何将ip地址转换成真实地址代码
本文永久链接地址:https://www.ymkuzhan.com/45931.html
本文永久链接地址:https://www.ymkuzhan.com/45931.html
下载声明:
本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压; 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版! 版权声明:
下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。 免责声明:
您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!


