You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:20