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

藏色散人
Freigeben: 2023-03-13 09:18:02
Original
3537 Leute haben es durchsucht

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');
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;;
    }
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage