Comment convertir une adresse IP en entier en php

藏色散人
Libérer: 2023-03-13 15:48:02
original
1750 Les gens l'ont consulté

Comment convertir une adresse IP en entier en PHP : 1. Créez un exemple de fichier PHP ; 2. Convertissez l'adresse IP en entier via la méthode "ip2long($ip);"

Comment convertir une adresse IP en entier en php

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

Comment convertir ip en entier avec php ?

Explication détaillée de la conversion mutuelle des adresses IP et des nombres entiers en PHP

Cet article présente principalement l'explication détaillée de la conversion mutuelle des adresses IP et des nombres entiers en PHP. Cet article présente l'utilisation des fonctions PHP. ip2long et long2ip, et leur introduction au BUG d'utilisation, et enfin deux algorithmes écrits par moi-même sont donnés. Les amis dans le besoin peuvent s'y référer

La conversion de l'IP en stockage entier est une tendance majeure dans l'optimisation des bases de données. lors du stockage de l'IP, les index de chaîne consomment plus de ressources que les index entiers, en particulier lorsque la quantité de données dans la table est importante et lorsque 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);
Copier après la connexion

Sortie :

-764540111
Copier après la connexion

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

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

Sortie :

210.110.011.49
-764540623
210.110.9.49
Copier après la connexion

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

 :

021.110.11.49
292424497
17.110.11.49
Copier après la connexion

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

Sortie :

0210.110.11.49
3530427185
210.110.11.49
Copier après la connexion

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

Sortie :

0210.110.11.49
-764540111
210.110.11.49
Copier après la connexion

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

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'));
Copier après la connexion

Sortie :

210.285.11.49,bool(false)210.205.11.49,bool(true)
Copier après la connexion

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.

Apprentissage recommandé : "

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!

Étiquettes associées:
source:php.cn
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