Heim  >  Artikel  >  Backend-Entwicklung  >  Warum hat PHP ip2long negative Zahlen? Wie kann man es lösen?

Warum hat PHP ip2long negative Zahlen? Wie kann man es lösen?

青灯夜游
青灯夜游nach vorne
2020-07-17 15:57:302825Durchsuche

Warum hat PHP ip2long negative Zahlen? Wie kann man es lösen?

php bietet ip2long- und long2ip-Methoden zur Verarbeitung von IP-Adressen.

1. ip2long – Konvertieren eines IPV4-String-Internetprotokolls in ein digitales Format

int ip2long ( string $ip_address )

Parameter: ip_address Eine Adresse in einem Standardformat.

Rückgabewert: Gibt die konvertierte Nummer der IP-Adresse oder FALSE zurück, wenn ip_address ungültig ist.

2. long2ip – Konvertieren Sie das Zahlenformat in ein IPV4-String-Internetprotokoll

string long2ip ( string $proper_address )

Parameter: proper_address Die korrekte Adresse von Long Integer Express.

Rückgabewert: Gibt die Internetadresse als String zurück.

3. So verwenden Sie

$ip = '10.1.1.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // 167837953
echo long2ip($ip_long); // 10.1.1.1

4. Ursachen und Lösungen für negative Zahlen

Wenn die IP-Adresse relativ ist große, negative Zahlen werden in ip2long angezeigt:

$ip = '192.168.101.100';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // -1062705820
echo long2ip($ip_long); // 192.168.101.100

Grunderklärung:

IPv4 verwendet vorzeichenlose 32-Bit-Adressen, daher gibt es höchstens 2 hoch 32 minus 1 (4294967295) Adressen. Schreiben Sie Dezimalzahlen, getrennt durch 4 Dezimalstellen.

wird als A.B.C.D aufgezeichnet, zum Beispiel: 192.168.100.100.

Jede Dezimalzahl in der IPv4-Adresse ist ein vorzeichenloses Byte im Bereich von 0 bis 255. Die Konvertierung der IPv4-Adresse in eine vorzeichenlose Zahl bedeutet eigentlich, jede Dezimalzahl in den entsprechenden 8 Bits zu platzieren, wodurch ein 4-Byte-Byte ohne Vorzeichen entsteht ganze Zahl. 192.168.100.100, 192.168 in den hohen 8 Ziffern und 100.100 in den niedrigen 8 Ziffern.

Lösung:

Verwenden Sie %u, um bei der Ausgabe vorzeichenlose Ganzzahlen zu formatieren.

$ip = '192.168.101.100';
$ip_long = sprintf('%u',ip2long($ip));
echo $ip_long.PHP_EOL; // 3232261476 
echo long2ip($ip_long); // 192.168.101.100

Empfohlene verwandte Tutorials: „PHP-Tutorial

Das obige ist der detaillierte Inhalt vonWarum hat PHP ip2long negative Zahlen? Wie kann man es lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen