Maison > développement back-end > Problème PHP > Comment convertir le format php ipv6

Comment convertir le format php ipv6

藏色散人
Libérer: 2023-03-11 17:12:01
original
2982 Les gens l'ont consulté

Méthode de conversion du format php ipv6 : créez d'abord un exemple de fichier PHP ; puis définissez un "$ipv6" ; enfin utilisez "gmp_strval(gmp_init($ipv6long,2),10);"

Comment convertir le format php ipv6

L'environnement d'exploitation de cet article : système windows7, version PHP7.1, ordinateur DELL G3

Comment convertir le format php ipv6 ?

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

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

Convertir ipv6 en numéro (entier positif) :

Pour l'adresse IP au format ipv6, nous ne pouvons pas utiliser la fonction ip2long() pour convertir directement, nous ne pouvons convertir que par d'autres méthodes. Ci-dessous, nous publierons ce que l'internaute Weissner a laissé dans le manuel PHP (http://php.net/manual/zh/function.ip2long.php#94477). Voici la solution. Avant cela, tout le monde doit faire attention au fait que le symbole de commentaire ';' avant extension=php_gmp.dll doit être supprimé dans le fichier php.ini, car la fonction de l'extension sera utilisée dans le code. .

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

$ipv6 = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210';
$ip_n = inet_pton($ipv6);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long='';
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 toujours convertir les champs de la base de données Conversion de type en type char ou varchar.

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

$ip = '192.168.101.100';
//$ip = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210';
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    echo sprintf('%u',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='';
    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

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