inet_pton不适用于10.0.1.4等本地IP地址

时间:2011-04-22 12:03:24

标签: php

<?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有效如何。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

它对我有用。我从你的示例代码中得到了一个二进制结构(虽然它没有可打印的字符,所以如果你在网络浏览器中运行它你可能什么也得不到。)

实际上,我甚至尝试过输出原始地址的代码,并显示没有信息丢失:

<?php
$ipaddress = '10.0.1.4';
$binip = inet_pton($ipaddress);
echo inet_ntop($binip);
?>

也许你对ip2long更感兴趣,它将地址转换为整数?或者您的问题可能在其他地方,例如在将数据放入数据库之前转义数据?

答案 1 :(得分:0)

您在此处遇到类似问题:

http://php.net/manual/en/function.inet-pton.php

您也可以从那里找到解决方案。看看该函数如何返回FALSE。