Maison  >  Article  >  développement back-end  >  Comment convertir une adresse IP PHP en numéro

Comment convertir une adresse IP PHP en numéro

藏色散人
藏色散人original
2020-11-01 13:58:083116parcourir

Comment convertir une adresse IP php en nombre : 1. Utilisez la fonction PHP ip2long et la fonction sprintf pour convertir ; 2. Convertissez via la méthode "gmp_strval(gmp_init($ipv6long,2),10);"

Comment convertir une adresse IP PHP en numéro

Recommandé : "Tutoriel vidéo PHP"

Convertir l'adresse IP en numéro en PHP (ipv4/ipv6)

Exigence : Convertir l'adresse IP ipv4 ou ivp6 en numéro et la stocker dans la base de données

1. Convertir ipv4 en nombre (entier positif) :

ipv4 peut être utilisé directement La fonction ip2long() fournie avec PHP est combinée avec la fonction sprintf() pour la conversion. Le code est le suivant :

$ip = '202.203.44.225';
$ipToInt = sprintf('%u',ip2long($ip)); // 结果为:3402312929
echo "ip '202.203.44.225' to int is: ".$ipToInt;

Le résultat est :

Comment convertir une adresse IP PHP en numéro

.

Fonction ip2long() Il s'agit de convertir ip en un nombre entier long, mais certains ip sont un nombre complexe lorsqu'ils sont convertis en un nombre entier long, comme ip :, vous devez donc utiliser la fonction sprintf() pour convertir le tableau en un entier positif. Il existe d'autres méthodes pour convertir des nombres complexes en entiers positifs, mais je pense que sprintf() est la méthode la plus pratique, je vous recommande donc d'utiliser sprintf() ici. De plus, je voudrais rappeler à tout le monde de ne pas utiliser la fonction abs() pour convertir des nombres négatifs, car les résultats convertis présenteront certaines différences, telles que :

$ip = '192.168.101.100';
$ip2int = ip2long($ip); 
echo abs($ip2int).&#39;<br/>&#39;; // 结果为:1062705820
echo sprintf(&#39;%u&#39;,$ip2int); // 结果为:3232261476

2. Convertissez ipv6 en nombres (entiers positifs ):

Pour les adresses IP au format ipv6, nous ne pouvons pas utiliser la fonction ip2long() pour les convertir directement, et ne pouvons les convertir que par d'autres méthodes. Ce qui suit sera publié par l'internaute Weissner dans le manuel PHP (. http://php.net/manual/zh/function .ip2long.php#94477) laissant une solution Avant cela, tout le monde doit faire attention au fait que le symbole de commentaire ';' avant extension=php_gmp.dll doit être ajouté. être supprimé dans le fichier php.ini, car il sera utilisé dans le code Changer la fonction dans l'extension. .

Le code pour convertir l'ipv6 en nombres est le suivant :

$ipv6 = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
$ip_n = inet_pton($ipv6);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
}
echo gmp_strval(gmp_init($ipv6long,2),10); // 结果为:338770000845734292534325025077361652240

Comme vous pouvez le voir, une fois l'adresse ipv6 convertie en nombres, il y a 38 nombres, et le bigint dans la base de données ne peut pas être enregistré, vous devez donc également convertir le type de champ dans la base de données en type char ou varchar.

Ci-joint le code pour déterminer si l'ip est ivp4 ou ipv6, et convertir l'ip au format numérique :

$ip = &#39;192.168.101.100&#39;;
//$ip = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    echo sprintf(&#39;%u&#39;,ip2long($ip));exit;
 
} else if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
 
$ip_n = inet_pton($ip);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
    while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
    }
    echo gmp_strval(gmp_init($ipv6long,2),10);exit;
}

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!

Déclaration:
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