Maison > Article > développement back-end > Comment convertir le format php ipv6
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);"
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
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; }
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!