Pourquoi php ip2long a-t-il des nombres négatifs ? Comment le résoudre ?

青灯夜游
Libérer: 2023-04-09 09:14:01
avant
2833 Les gens l'ont consulté

Pourquoi php ip2long a-t-il des nombres négatifs ? Comment le résoudre ?

php fournit les méthodes ip2long et long2ip pour traiter les adresses IP.

1. ip2long - Convertir un protocole Internet de chaîne IPV4 en format numérique

int ip2long ( string $ip_address )
Copier après la connexion

Paramètres : ip_address Une adresse dans un format standard.

Valeur de retour : Renvoie le numéro converti de l'adresse IP ou FALSE si ip_address n'est pas valide.

2. long2ip - Convertir le format numérique en chaîne IPV4 Protocole Internet

string long2ip ( string $proper_address )
Copier après la connexion

Paramètre : proper_address L'adresse correcte de l'entier long express.

Valeur de retour : Renvoie l'adresse Internet sous forme de chaîne.

3. Comment utiliser

$ip = '10.1.1.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // 167837953
echo long2ip($ip_long); // 10.1.1.1
Copier après la connexion

4. Causes et solutions pour les nombres négatifs

Lorsque l'adresse IP est relative. de grands nombres négatifs apparaîtront dans ip2long :

$ip = '192.168.101.100';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // -1062705820
echo long2ip($ip_long); // 192.168.101.100
Copier après la connexion

Explication de la raison :

IPv4 utilise des adresses 32 bits non signées, il y en a donc au plus 2 à la puissance 32 moins 1 (4294967295) adresses. Écrivez des nombres décimaux séparés par 4 points décimaux.

est enregistré comme A.B.C.D, par exemple : 192.168.100.100.

Chaque nombre décimal dans l'adresse IPv4 est un octet non signé, allant de 0 à 255. Convertir l'adresse IPv4 en un nombre non signé signifie en fait placer chaque nombre décimal dans les 8 bits correspondants, formant un nombre non signé de 4 octets. entier. 192.168.100.100, 192 168 dans les 8 chiffres supérieurs et 100 100 dans les 8 chiffres inférieurs.

Solution :

Utilisez %u pour formater un entier non signé lors de la sortie.

$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
Copier après la connexion

Tutoriels associés recommandés : "Tutoriel PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!