PHP如何获取IP地址的最后两个八位字节?
获取IP地址最后两个八位字节的正确方法
你遇到的问题很明确——原代码只能拿到最后一个八位字节的最后一位,这是因为strrchr($ip, '.')只会返回最后一个点开始的子串(比如对于192.168.0.79,它返回的是.79),再用substr(...,2)从索引2开始截取,自然只能拿到9了。而且这个思路从根本上没法获取倒数第二个八位字节,得换个方式来实现。
下面给你几种可靠的解决方案:
方法一:分割数组后截取拼接
这是最直观易懂的方式,把IP按.分割成数组,再取最后两个元素拼接:
$ip = '192.168.0.79'; $ipParts = explode('.', $ip); // 取数组最后两个元素,用点连接 $lastTwoOctets = implode('.', array_slice($ipParts, -2)); echo $lastTwoOctets; // 输出:0.79
explode('.', $ip)把IP拆成['192', '168', '0', '79']array_slice($ipParts, -2)从数组末尾取2个元素,得到['0', '79']implode('.', ...)把这两个元素用点拼接成最终结果
方法二:正则表达式匹配
如果你习惯用正则,可以直接匹配IP末尾的数字.数字格式:
$ip = '192.168.0.79'; // 匹配最后两个八位字节 preg_match('/(\d+\.\d+)$/', $ip, $matches); $lastTwoOctets = $matches[1]; echo $lastTwoOctets; // 输出:0.79
正则(\d+\.\d+)$的意思是:匹配末尾的一个或多个数字+点+一个或多个数字,刚好对应最后两个八位字节。
方法三:字符串截取(修正思路)
如果一定要用字符串截取的方式,可以先找到倒数第二个点的位置,再从那里开始截取:
$ip = '192.168.0.79'; // 先找到最后一个点的位置,再取前面的内容找倒数第二个点 $lastDotPos = strrpos($ip, '.'); $secondLastDotPos = strrpos(substr($ip, 0, $lastDotPos), '.'); $lastTwoOctets = substr($ip, $secondLastDotPos + 1); echo $lastTwoOctets; // 输出:0.79
这个思路是先定位到最后一个点,截取它前面的内容后再找倒数第二个点,最后从这个点的下一位开始截取,就能拿到最后两个八位字节。
内容的提问来源于stack exchange,提问作者Captain Harlock
相关产品推荐
相关产品推荐

