Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie eine PHP-IP in eine Nummer

So konvertieren Sie eine PHP-IP in eine Nummer

藏色散人
藏色散人Original
2020-11-01 13:58:083041Durchsuche

So konvertieren Sie eine PHP-IP in eine Zahl: 1. Verwenden Sie zum Konvertieren die PHP-Funktion ip2long. 2. Konvertieren Sie mit der Methode „gmp_strval(gmp_init($ipv6long,2),10);“

So konvertieren Sie eine PHP-IP in eine Nummer

Empfohlen: „PHP-Video-Tutorial

IP in Zahlen in PHP konvertieren (ipv4/ipv6)

Anforderungen: Konvertieren Sie die IP-Adresse von ipv4 oder ivp6 in Zahlen und speichern Sie sie in der Datenbank

1. Konvertieren Sie ipv4 in eine Zahl (positive Ganzzahl):

ipv4 kann direkt durch Kombination der PHP-eigenen Funktion ip2long() mit der Funktion sprintf() konvertiert werden. Der Code lautet wie folgt:

$ip = '202.203.44.225';
$ipToInt = sprintf('%u',ip2long($ip)); // 结果为:3402312929
echo "ip '202.203.44.225' to int is: ".$ipToInt;

Das Ergebnis ist:

So konvertieren Sie eine PHP-IP in eine Nummer

Die Funktion ip2long() konvertiert ip in eine lange Ganzzahl, aber einige ips sind komplexe Zahlen, wenn sie in eine lange Ganzzahl konvertiert werden, wie z. B. ip:, sodass Sie die Funktion sprintf() verwenden müssen, um das Array in a umzuwandeln positive ganze Zahl. Es gibt andere Methoden, um komplexe Zahlen in positive ganze Zahlen umzuwandeln, aber ich denke, sprintf() ist die bequemste Methode, daher empfehle ich Ihnen, hier sprintf() zu verwenden. Darüber hinaus erinnere ich alle daran, die Funktion abs() nicht zum Konvertieren negativer Zahlen zu verwenden, da die konvertierten Ergebnisse bestimmte Unterschiede aufweisen, wie zum Beispiel:

$ip = '192.168.101.100';
$ip2int = ip2long($ip); 
echo abs($ip2int).&#39;<br/>&#39;; // 结果为:1062705820
echo sprintf(&#39;%u&#39;,$ip2int); // 结果为:3232261476

2. Konvertieren Sie IPv6 in Zahlen (positive ganze Zahlen):

Für IP-Adressen Im IPv6-Format können wir die Funktion ip2long() nicht zum direkten Konvertieren verwenden. Wir können die Konvertierung nur über andere Methoden durchführen. Im Folgenden werden wir veröffentlichen, was Netizen Weissner im PHP-Handbuch hinterlassen hat (http://php.net/manual/zh/function .ip2long.php#94477) Hier ist die Lösung. Zuvor muss jeder darauf achten, dass das Kommentarsymbol „;“ vor extension=php_gmp.dll entfernt werden muss, da die Funktion in der Erweiterung wird im Code verwendet. .

Der Code zum Konvertieren von IPv6 in Zahlen lautet wie folgt:

$ipv6 = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
$ip_n = inet_pton($ipv6);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
}
echo gmp_strval(gmp_init($ipv6long,2),10); // 结果为:338770000845734292534325025077361652240

Wie Sie sehen können, gibt es nach der Konvertierung der IPv6-Adresse in Zahlen 38 Zahlen, und der Bigint in der Datenbank kann nicht gespeichert werden, sodass Sie ihn trotzdem speichern müssen Konvertieren Sie die Felder in der Datenbank. Typkonvertierung in den Typ char oder varchar.

Anbei ist der Code, um festzustellen, ob die IP ivp4 oder ipv6 ist, und um die IP in ein digitales Format zu konvertieren:

$ip = &#39;192.168.101.100&#39;;
//$ip = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    echo sprintf(&#39;%u&#39;,ip2long($ip));exit;
 
} else if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
 
$ip_n = inet_pton($ip);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
    while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
    }
    echo gmp_strval(gmp_init($ipv6long,2),10);exit;
}

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie eine PHP-IP in eine Nummer. 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