替换 IP 2 字节函数
Replacing IP 2 bytes function
我正在优化处理成员 IP 的脚本。这将转换为 4 字节字符并且工作正常 -
function ip2bytes($ip)
{
$res = '';
$parts = explode('.', $ip);
if (count($parts) !== 4)
return null;
for ($i = 0; $i < 4; $i++) {
$b = $parts[$i];
if (!is_numeric($b))
return null;
$b = intval($b);
if ($b < 0 || $b >= 256)
return null;
$res .= chr($b);
}
return $res;
}
$bs = ip2bytes($user['ip']);
然而,这一行提供了完全相同的结果:
$bs = inet_pton($user['ip']);
var 转储都产生相同的预期结果:
string(4) "nd-"
string(4) "nd-"
除了支票,有什么区别?我想知道当此 PHP 内置函数提供相同结果时我是否可以依赖 inet_pton() 而不是函数调用的开销,因为此脚本同时获得大量 GET 请求.我想要一个更轻的代码库。
如有任何建议,我们将不胜感激。
为了有效地存储ipv4地址,通常使用32位整数。
$ip = "127.1.2.3";
$int32 = ip2long($ip); // int(2130772483)
inet_pton returns 用于 ipv4 的 4 字节字符串。
$bs = inet_pton($ip); //"\x7f\x01\x02\x03"
你的 ip2bytes 函数 returns 结果相同。第三个变体清楚地说明了正在做什么。
$bs = pack('N',ip2long($ip));
这些功能都非常快,几微秒的时间与其他动作相比几乎可以忽略不计。使用inet_pton.
就不用担心这个问题了
我正在优化处理成员 IP 的脚本。这将转换为 4 字节字符并且工作正常 -
function ip2bytes($ip)
{
$res = '';
$parts = explode('.', $ip);
if (count($parts) !== 4)
return null;
for ($i = 0; $i < 4; $i++) {
$b = $parts[$i];
if (!is_numeric($b))
return null;
$b = intval($b);
if ($b < 0 || $b >= 256)
return null;
$res .= chr($b);
}
return $res;
}
$bs = ip2bytes($user['ip']);
然而,这一行提供了完全相同的结果:
$bs = inet_pton($user['ip']);
var 转储都产生相同的预期结果:
string(4) "nd-"
string(4) "nd-"
除了支票,有什么区别?我想知道当此 PHP 内置函数提供相同结果时我是否可以依赖 inet_pton() 而不是函数调用的开销,因为此脚本同时获得大量 GET 请求.我想要一个更轻的代码库。
如有任何建议,我们将不胜感激。
为了有效地存储ipv4地址,通常使用32位整数。
$ip = "127.1.2.3";
$int32 = ip2long($ip); // int(2130772483)
inet_pton returns 用于 ipv4 的 4 字节字符串。
$bs = inet_pton($ip); //"\x7f\x01\x02\x03"
你的 ip2bytes 函数 returns 结果相同。第三个变体清楚地说明了正在做什么。
$bs = pack('N',ip2long($ip));
这些功能都非常快,几微秒的时间与其他动作相比几乎可以忽略不计。使用inet_pton.
就不用担心这个问题了