<?php
//$ipaddress = $_SERVER['REMOTE_ADDR'];
$ipaddress = '10.0.1.4';
$binip = inet_pton($ipaddress);
echo $binip;
?>
返回空白。如果我使用我的面向公众的IP,它返回正确的结果。它将返回192.168.1.2
的结果(我旧的LinkSys路由器有一个类似的ip)。我正在本地ip的Linux机器上测试我的应用程序。所有连接到它的机器都使用一个内部ip 10.0.1.XX
。我的应用程序使用MySQL,如果binip是空白的,它会给我一个错误。所以我不确定一个工作围绕本地ip。我在想,也许它与检测,如果它的本地ip在这种格式,然后编辑ipaddress变量,使其有效的inet_pton某种方式。什么好主意吗?
适合我。我从你的示例代码得到一个二进制结构(虽然,它没有可打印的字符,所以如果你在web浏览器中运行它,你可能什么也得不到)。
实际上,我甚至尝试了输出原始地址的代码,并显示没有信息丢失:
<?php
$ipaddress = '10.0.1.4';
$binip = inet_pton($ipaddress);
echo inet_ntop($binip);
?>
也许你对ip2long更感兴趣,它将地址转换为整数?或者您的问题在其他地方,例如在将数据放入数据库之前对其进行转义?
您这里也有类似的问题:
http://php.net/manual/en/function.inet-pton.php你也可以从那里找到解决方案。查看该函数如何返回FALSE。