note 94477 modified in function.ip2long by felipe

From: Date: Sat, 07 Nov 2009 14:43:19 +0000
Subject: note 94477 modified in function.ip2long by felipe
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-162475@lists.php.net to get a copy of this message
Here some working ip2long6 and long2ip6 functions - keep in mind that this needs php gmp-lib: <?php $ipv6 = "2001:4860:a005::68"; function ip2long6($ipv6) { $ip_n = inet_pton($ipv6); $bits = 15; // 16 x 8 bit = 128bit while ($bits >= 0) { $bin = sprintf("%08b",(ord($ip_n[$bits]))); $ipv6long = $bin.$ipv6long; $bits--; } return gmp_strval(gmp_init($ipv6long,2),10); } function long2ip6($ipv6long) { $bin = gmp_strval(gmp_init($ipv6long,10),2); if (strlen($bin) < 128) { $pad = 128 - strlen($bin); for ($i = 1; $i <= $pad; $i++) { $bin = "0".$bin; } } $bits = 0; while ($bits <= 7) { $bin_part = substr($bin,($bits*16),16); $ipv6 .= dechex(bindec($bin_part)).":"; $bits++; } // compress return inet_ntop(inet_pton(substr($ipv6,0,-1))); } print $ipv6long = ip2long6($ipv6)."\n"; print $ipv6 = long2ip6($ipv6long)."\n"; ?> outputs: 42541956150894553250710573749450571880 2001:4860:a005::68 --was-- Here some working ip2long6 and long2ip6 functions - keep in mind that this needs php gmp-lib: $ipv6 = "2001:4860:a005::68"; function ip2long6($ipv6) { $ip_n = inet_pton($ipv6); $bits = 15; // 16 x 8 bit = 128bit while ($bits >= 0) { $bin = sprintf("%08b",(ord($ip_n[$bits]))); $ipv6long = $bin.$ipv6long; $bits--; } return gmp_strval(gmp_init($ipv6long,2),10); } function long2ip6($ipv6long) { $bin = gmp_strval(gmp_init($ipv6long,10),2); if (strlen($bin) < 128) { $pad = 128 - strlen($bin); for ($i = 1; $i <= $pad; $i++) { $bin = "0".$bin; } } $bits = 0; while ($bits <= 7) { $bin_part = substr($bin,($bits*16),16); $ipv6 .= dechex(bindec($bin_part)).":"; $bits++; } // compress return inet_ntop(inet_pton(substr($ipv6,0,-1))); } print $ipv6long = ip2long6($ipv6)."\n"; print $ipv6 = long2ip6($ipv6long)."\n"; outputs: 42541956150894553250710573749450571880 2001:4860:a005::68 http://php.net/manual/en/function.ip2long.php

« previous php.notes (#162475) next »