stackoverflow上有一个很好用的方法,点击查看。可能需要翻墙,如果打不开,可以参考下面的例子:
function ip2long_v6($ip) { $ip_n = inet_pton($ip); $bin = ''; for ($bit = strlen($ip_n) - 1; $bit >= 0; $bit--) { $bin = sprintf('%08b', ord($ip_n[$bit])) . $bin; } if (function_exists('gmp_init')) { return gmp_strval(gmp_init($bin, 2), 10); } elseif (function_exists('bcadd')) { $dec = '0'; for ($i = 0; $i < strlen($bin); $i++) { $dec = bcmul($dec, '2', 0); $dec = bcadd($dec, $bin[$i], 0); } return $dec; } else { trigger_error('GMP or BCMATH extension not installed!', E_USER_ERROR); } } $ip = 'fe80:0:0:0:202:b3ff:fe1e:8329'; $res = ip2long_v6($ip); var_dump($res);
这里要讨论的是如果运行这个方法提示”GMP or BCMATH extension not installed”的情况。
根据提示很明显是没有安装gmp、bcmath两个扩展,两个扩展的功能可以参考手册bcmath, gmp。
由于在本地MAC两个PHP版本(php5.6.30与php7.0.22)下测试方法都正常,在测试机上提示了缺少扩展gmp、bcmath。
在本地查看扩展, 两个版本都有bcmath,都没有gmp。php5版本是自带的,php7是自己编译安装的。测试机上两个模块都没有。由此可见,只需要安装bcmath即可。
// 检查本地php是否存在模块gmp 或 bcmath php -m | grep -E 'bcmath|gmp' php7 -m | grep -E 'bcmath|gmp' bcmath
资料显示php5和php7的源码包中都有bcmath扩展(编译扩展安装参考),测试机上由于历史久远使用的是php5.4.41并且找不到源码包,通过yum安装即可
yum install php-bcmath
yum安装果然很神秘, 安装后查看bcmath发现, 不同版本的php下都有bcmath.so扩展文件了。
find / -name bcmath.so
/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/bcmath.so
/usr/local/php7/lib/php/extensions/no-debug-non-zts-20100525/bcmath.so
/usr/lib64/php/modules/bcmath.so
在php.ini文件中引入bcmath.so
echo ‘extension=”bcmath.so”‘ >> /usr/local/php/lib/php.ini
重启php-fpm
参考:
https://stackoverflow.com/questions/3400362/how-to-install-bcmath-module