2011-04-22 80 views
0
<?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一些如何。有任何想法吗?inet_pton在10.0.1.4这样的本地IP地址上不起作用

+0

您的问题是inet_ntop()的标题所示,还是inet_pton()作为代码示例显示,或两者兼而有之?如果你回应inet_ntop($ binip),你会得到什么? – 2011-04-22 12:09:02

+0

“它返回空白”好'回声'回声;它不会“返回”任何东西。什么是“空白”?做'var_dump($ binip)'并找出变量真正包含的内容:一个空字符串? 'FALSE'? 'NULL'?我也不确定你期望看到什么,因为'inet_pton' [不会给你一个可读的字符串](http://php.net/manual/en/function.inet-pton.php) 。也许你的意思是'ip2long'? – 2011-04-22 12:20:34

回答

1

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

事实上,我甚至试过这个代码输出原始地址,并表明没有信息丢失怎么回事:

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

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

+0

谢谢。我想这是一个MySql问题。我从二进制更改为varbinary。没有考虑不可打印的字符。谢谢! – Keverw 2011-04-22 12:15:53

+0

从二进制到varbinary的更改不应解决问题,除非二进制文件的大小错误。确保该字段的长度为4,以便为整个地址腾出空间,不多也不少。 – 2011-04-22 12:21:49

+0

在手册中进一步阅读时,他们实际上说,当从BINARY字段中选择(但不在VARBINARY中)时,MySQL <5.0.15版本可能会更改该值(剥离尾随空格),因此如果您有旧版本。 – 2011-04-22 12:26:26