Inet_pton不能在10.0.1.4等本地IP地址上工作


inet_pton does not work on local ip addresses like 10.0.1.4

<?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。