Maison > Article > développement back-end > Comment convertir une adresse IP PHP en entier
Comment convertir une adresse IP php en int : 1. Créez un exemple de fichier PHP ; 2. Définissez une adresse IP ; 3. Convertissez l'adresse IP en un entier via la fonction ip2long en PHP.
L'environnement d'exploitation de cet article : système Windows 7, version PHP7.1, ordinateur Dell G3
Comment convertir une ip php en int ?
Explication détaillée de la conversion entre adresses IP et nombres entiers en PHP
Cet article présente l'utilisation des fonctions PHP ip2long et long2ip, ainsi que leur introduction aux BUG, et donne enfin deux algorithmes écrits par mes amis dans. Le besoin peut se référer à La conversion de
IP en stockage entier est une tendance majeure dans l'optimisation des bases de données. De nombreuses personnes utilisent encore le stockage de type chaîne lors du stockage des index IP. La table est longue et si vous souhaitez interroger les données d'un certain segment IP, l'IP mentionnée aujourd'hui fait référence à ip4, et ip6 n'entre pas dans le cadre de cet article.
Fonctions système ip2long et long2ip
Il existe une fonction intégrée ip2long en PHP qui peut convertir l'adresse IP en un entier.
Le code est le suivant :
$ip = '210.110.11.49'; echo ip2long($ip);
Sortie :
-764540111
Le type entier de sortie a un signe négatif car le résultat que nous obtenons est un type entier signé. La valeur maximale du type entier signé est 2147483647. Pour convertir le résultat. à un type non signé, vous pouvez faire ceci Écrivez
3530427185
Utilisez long2ip pour reconvertir l'entier en adresse IP
$ip = '210.110.11.49';$ip_int = ip2long($ip);echo $ip."<br />";echo $ip_int."<br />";echo long2ip($ip_int);
Sortie :
210.110.011.49 -764540623 210.110.9.49
Le résultat de la conversion ne correspond pas, nous essayons d'ajouter 0 en tête avant le premier numéro de l'adresse IP, puis regardez la sortie
$ip = '021.110.11.49';$ip_int = ip2long($ip);echo $ip."<br />";echo $ip_int."<br />";echo long2ip($ip_int);
:
021.110.11.49 292424497 17.110.11.49
Les résultats de la conversion sont tous faux. Les exemples ci-dessus sont tous causés par l'ajout d'un 0 en tête, ce qui entraîne une erreur dans le résultat de la conversion et le résultat de l'inversion ne correspond pas à l'adresse IP convertie d'origine.
Principe de conversion
Il existe actuellement deux algorithmes :
Premièrement, la première section est multipliée par 256 au cube, la deuxième section est multipliée par 256 au carré, la troisième section est multipliée par 256 et la somme finale
$ip = '0210.110.11.49'; 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 />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);
Sortie :
0210.110.11.49 3530427185 210.110.11.49
Deuxièmement, utilisez des opérateurs de bits
$ip = '0210.110.11.49'; 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 />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);
Sortie :
0210.110.11.49 -764540111 210.110.11.49
Détectez si l'adresse IP est légale
Tout d'abord, parcourez la détection par vous-même
function check_ip($ip){ $iparr = explode('.',$ip); foreach($iparr as $v){ if($v>255) return false; } return true; } echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49')); [code] 输出: [code]210.285.11.49,bool(false)210.205.11.49,bool(true)
Deuxièmement, utilisez ip2long pour return
function check_ip($ip){ if(ip2long($ip)) return true; return false; } echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));
Sortie :
210.285.11.49,bool(false)210.205.11.49,bool(true)
Postscript
De nombreuses personnes utilisent la conversion ip2long pour stocker les champs de type int dans la bibliothèque d'écriture ip. Cependant, sur différentes plates-formes système, les valeurs obtenues par la fonction ip2long sont différentes, il se peut donc que lors de la lecture des données de la base de données et de l'inversion de l'IP, l'IP obtenue en utilisant long2ip ne corresponde pas à l'IP d'origine. S'il s'agit de MySQL, vous pouvez utiliser les fonctions système MySQL INET_ATON et INET_NTOA pour résoudre le problème. , ou utilisez le type bigint pour le traitement, ou écrivez la fonction vous-même.
Tutoriel vidéo 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!