Comment convertir une adresse IP PHP en numéro

藏色散人
Libérer: 2023-03-06 21:38:01
original
3087 Les gens l'ont consulté

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

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

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

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

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: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
À 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!