Heim >Backend-Entwicklung >PHP-Problem >So konvertieren Sie eine IP-Adresse in einen echten Adresscode in PHP

So konvertieren Sie eine IP-Adresse in einen echten Adresscode in PHP

藏色散人
藏色散人Original
2021-10-14 09:28:043544Durchsuche

php-Methode zum Konvertieren einer IP-Adresse in eine echte Adresse: 1. Erstellen Sie eine PHP-Beispieldatei. 2. Verwenden Sie „define('WEB_ROOT',dirname(__FILE__));echo Convertip('ip','full');" Methode Implementieren Sie einfach die Konvertierung.

So konvertieren Sie eine IP-Adresse in einen echten Adresscode in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

php-Methode zum Konvertieren der IP-Adresse in eine echte Adresse

Beispiele für die Methodenverwendung sind wie folgt

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 = &#39;- LAN&#39;;
        }elseif($iparray[0]>255||$iparray[1]>255||$iparray[2]>255||$iparray[3]>255){
            $return=&#39;- Invalid IP Address&#39;;
        }else{
            $tinyipfile=WEB_ROOT.&#39;./tinyipdata.dat&#39;;//IP==地址数据包精简版
            $fullipfile=WEB_ROOT.&#39;./wry.dat&#39;;//IP==地址数据包完整版
            if($integrity==&#39;simple&#39;&&@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(&#39;.&#39;,$ip);
    $ip=pack(&#39;N&#39;,ip2long($ip));
    $ipdot[0]=(int)$ipdot[0];
    $ipdot[1]=(int)$ipdot[1];
    if($fp===NULL&&$fp=@fopen($ipdatafile,&#39;rb&#39;)){
        $offset=@unpack(&#39;Nlen&#39;,@fread($fp,4));
        $index=@fread($fp,$offset[&#39;len&#39;]-4);
    }elseif($fp==FALSE){
        return  &#39;- Invalid IP data file&#39;;
    }
    $length=$offset[&#39;len&#39;]-1028;
    $start =@unpack(&#39;Vlen&#39;,$index[$ipdot[0]*4].$index[$ipdot[0]*4+1].$index[$ipdot[0]*4+2].$index[$ipdot[0]*4+3]);
    for ($start=$start[&#39;len&#39;]*8+1024;$start<$length;$start+=8){
        if ($index{$start}.$index{$start+1}.$index{$start+2}.$index{$start+3}>=$ip){
            $index_offset=@unpack(&#39;Vlen&#39;,$index{$start+4}.$index{$start+5}.$index{$start+6}."\x0");
            $index_length=@unpack(&#39;Clen&#39;,$index{$start+7});
            break;
        }
    }
    @fseek($fp,$offset[&#39;len&#39;]+$index_offset[&#39;len&#39;]-1024);
    if($index_length[&#39;len&#39;]){
        return &#39;- &#39;.@fread($fp,$index_length[&#39;len&#39;]);
    }else{
        return &#39;- Unknown&#39;;
    }
}

func Convertip_full

function convertip_full($ip,$ipdatafile){
    if(!$fd=@fopen($ipdatafile,&#39;rb&#39;)){
        return &#39;- Invalid IP data file&#39;;
    }
    $ip=explode(&#39;.&#39;,$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(&#39;&#39;,unpack(&#39;L&#39;,$DataBegin));
    if($ipbegin<0) $ipbegin+=pow(2,32);
    @$ipend=implode(&#39;&#39;,unpack(&#39;L&#39;,$DataEnd));
    if($ipend<0) $ipend+=pow(2,32);
    $ipAllNum=($ipend-$ipbegin)/7+1;
    $BeginNum=$ip2num=$ip1num=0;
    $ipAddr1=$ipAddr2=&#39;&#39;;
    $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 &#39;- System Error&#39;;
        }
        $ip1num=implode(&#39;&#39;,unpack(&#39;L&#39;,$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 &#39;- System Error&#39;;
        }
        $DataSeek=implode(&#39;&#39;,unpack(&#39;L&#39;,$DataSeek.chr(0)));
        fseek($fd,$DataSeek);
        $ipData2=fread($fd,4);
        if(strlen($ipData2)<4){
            fclose($fd);
            return &#39;- System Error&#39;;
        }
        $ip2num=implode(&#39;&#39;,unpack(&#39;L&#39;,$ipData2));
        if($ip2num<0) $ip2num+=pow(2,32);
        if($ip2num<$ipNum){
            if($Middle==$BeginNum){
                fclose($fd);
                return &#39;- Unknown&#39;;
            }
            $BeginNum=$Middle;
        }
    }
    $ipFlag=fread($fd,1);
    if($ipFlag==chr(1)){
        $ipSeek=fread($fd,3);
        if(strlen($ipSeek)<3){
            fclose($fd);
            return &#39;- System Error&#39;;
        }
        $ipSeek=implode(&#39;&#39;,unpack(&#39;L&#39;,$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 &#39;- System Error&#39;;
        }
        $ipFlag=fread($fd,1);
        if($ipFlag==chr(2)){
            $AddrSeek2=fread($fd,3);
            if(strlen($AddrSeek2)<3){
                fclose($fd);
                return &#39;- System Error&#39;;
            }
            $AddrSeek2=implode(&#39;&#39;,unpack(&#39;L&#39;,$AddrSeek2.chr(0)));
            fseek($fd,$AddrSeek2);
        }else{
            fseek($fd,-1,SEEK_CUR);
        }
        while(($char=fread($fd,1)) != chr(0))
        $ipAddr2 .= $char;
        $AddrSeek=implode(&#39;&#39;,unpack(&#39;L&#39;,$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 &#39;- System Error&#39;;
        }
        $AddrSeek2=implode(&#39;&#39;,unpack(&#39;L&#39;,$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(&#39;/http/i&#39;,$ipAddr2)){
        $ipAddr2=&#39;&#39;;
    }
    $ipaddr="$ipAddr1 $ipAddr2";
    $ipaddr=preg_replace(&#39;/CZ88\.NET/is&#39;,&#39;&#39;,$ipaddr);
    $ipaddr=preg_replace(&#39;/^\s*/is&#39;,&#39;&#39;,$ipaddr);
    $ipaddr=preg_replace(&#39;/\s*$/is&#39;,&#39;&#39;,$ipaddr);
    if(preg_match(&#39;/http/i&#39;,$ipaddr)||$ipaddr==&#39;&#39;){
        $ipaddr=&#39;- Unknown&#39;;
    }
    return &#39;- &#39;.$ipaddr;
}

Empfohlenes Lernen: „PHP Video Tutorial

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie eine IP-Adresse in einen echten Adresscode in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn