Heim  >  Artikel  >  Backend-Entwicklung  >  ip2long-long2ip

ip2long-long2ip

WBOY
WBOYOriginal
2016-07-29 09:14:452692Durchsuche

1. Gründe für die Nachfrage

Die Umwandlung von IP-Adressen in Ganzzahlspeicher ist für die Datenbankoptimierung sehr wichtig. Viele Leute speichern IP-Adressen als Zeichenfolgentypen. Wenn die Datenmenge groß ist, werden ernsthaft Ressourcen verbraucht. Darüber hinaus ist die Geschwindigkeit der Umformung von index viel höher als die von string index, daher ist es notwendig, IP zum Umformen des Speichers zu verwenden und ihn bei Verwendung wieder in IP umzuformen. Bei der IP-Konvertierung von PHP wird IPv4 in diesem Artikel erläutert, IPv6 wird nicht erläutert.

2. Die im System integrierte Funktion

Die für die IP-Konvertierung und -Formung verwendete Funktion ist: ip2long

Beispiel:

$ip=” 60.6.205.138”;

echo ip2long($ip);

Die zum Konvertieren von IP in Plastik verwendete Funktion ist: long2ip

Beispiel:

$ip=”60.6.205.138”;

$ipInt=ip2long($ip);

echo long2ip($ipInt);

3. Häufige Probleme

1 Wenn die IP-Adresse relativ groß ist, kann die konvertierte Ganzzahl den maximalen Shaping-Bereich überschreiten. Der maximale Wert einer vorzeichenbehafteten Ganzzahl beträgt 2147483647. Wenn dieser Wert überschritten wird, wird er zu einer negativen Zahl.

Lösung: Schreiben Sie $ip = bindec(decbin(ip2long($ip)));

Beispiel:
$ip = "192.168.10.1":

$ip= bindec(decbin(ip2long($ip)));

echo $ip;

Beschreibung: Die Decbin-Funktion wandelt Dezimalzahlen in Binärzahlen um, bindec-Funktion Konvertiert binär in ganzzahlig.

2. Wenn einige IP-Adressen das Präfix 0 haben, schlägt die Konvertierung fehl.

Beispiel:
$ip = '021.110.11.49';

$ip_int = ip2long($ip);

echo $ip."<br />";

echo $ip_int."<br />";

echo long2ip($ip_int);

Wenn die IP in eine Umformung konvertiert wird, tritt bei der Rückkonvertierung der IP ein Fehler auf und die IP-Adresse stimmt nicht mit der ursprünglichen überein. Der Grund dafür ist, dass es eine führende 0 gibt.

Lösung:

Erstens, weil die IP-Konvertierungsformung basiert auf: Das erste Segment wird mit 256 quadriert multipliziert, das zweite Segment wird mit 256 quadriert multipliziert, und das dritte Segment wird mit 256 multipliziert. Das Segment wird mit 256 multipliziert und man erhält die Endsumme.
$ip = '060.06.205.138';

function ipToInt($ip){

$iparr = explode('.',$ip);

$num = 0;

for($i=0;$i<count($iparr);$i++){

$num += intval($iparr[$i]) *pow(256,count($iparr)-($i+1));

}

return $num;

}

echo $ip.'<br />';

Erklärung:

intval konvertiert die Variable in einen Ganzzahltyp

pow(4, 2 ) gibt 16 zurück, gibt x hoch y-ten zurück

Zweitens, gelöst durch bitweise Operatoren.

$ip = '060.06.205.138'; 

function ipToInt($ip){

$iparr = explode('.',$ip);

return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
} 
echo  $ip.'<br />';

$ipInt = ipToInt($ip);

echo $ipInt.'<br />';

echo long2ip($ipInt);

Der bitweise Operatoralgorithmus besteht einfach darin, die aktuelle Zahl um drei Bits nach links zu verschieben, die aktuelle Zahl mit der dritten Potenz von 2 zu multiplizieren und das linke Bit um zu verschieben zwei Bits und multipliziere mit dem Quadrat von 2. Bei der Rechtsverschiebung wird ein binärer Bitoperand um die angegebene Anzahl von Bits nach rechts verschoben. Die nach links verschobenen leeren Bits werden je nach Maschine entweder mit 0 oder mit dem Vorzeichenbit aufgefüllt .

Wenn Sie es nicht verstehen, befolgen Sie einfach die erste Methode.

Der Artikel endet hier. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen und wir werden diese gemeinsam besprechen. Ich hoffe, Sie können mehr üben und Ihren Eindruck vertiefen. Lassen Sie uns gemeinsam hart arbeiten!


Das Obige hat ip2long-long2ip vorgestellt, einschließlich einiger Aspekte davon. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

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