inet_pton不工作

时间:2012-01-26 21:22:56

标签: php

我正在尝试使用PHP代码中的inet_pton()将IP地址转换为mysql存储的数字字符串,但此函数要么返回任何内容,要么:' ?i' 注意:IP地址是标准IPv4(而不是我的本地主机)

我的代码是:echo inet_pton($ _ SERVER ['REMOTE_ADDR']);

2 个答案:

答案 0 :(得分:5)

inet_pton()的输出是二进制字符串 - 在大多数情况下无法打印。您可以尝试使用

echo inet_pton("65.66.67.68");
在@YWSW的反馈之后

编辑问题是,如何在4字节173,63,155和119中的字符串“173.63.155.19”中拆分IP地址

这可以通过

来实现
$ip_bytes=inet_pton($ip_string);

$ip_byte0=ord($ip_bytes[0]);
$ip_byte1=ord($ip_bytes[1]);
$ip_byte2=ord($ip_bytes[2]);
$ip_byte3=ord($ip_bytes[3]);

$ ip_byte [0..3]是你需要的4个字节。

请理解,我并不赞同将数据库中的IP地址存储为4个整数!

答案 1 :(得分:2)

您的代码:

echo inet_pton($_SERVER['REMOTE_ADDR']);

将可重写IP从普通字符串转换为二进制字符串(我包括NULL字符和其他奇怪值,因此不可更改)。 要将二进制ip值表示回可重命名的字符串,请使用bin2hex()。这会将二进制值转换为可重写的十六进制字符串:

echo bin2hex(inet_pton($_SERVER['REMOTE_ADDR']));

它并没有完全结束:下一个问题是要考虑要显示它的格式:IPv6通常将每个二进制字节显示为十六进制并且具有':'每隔四个十六进制,而IPv4通常将每个二进制字节显示为数值(不是十六进制!)并且具有'。'在每个字节到数字表示之后。