2013-02-13 84 views
2

我试图循环访问由文本文件中收集的IP地址组成的数组。其最终目标是检索每个IP的主机名。我的问题是我只从数组中的最后一个IP获得结果。我觉得这很简单,但我显然缺少一些东西。Foreach循环未按预期方式传递所有值

<?php 
$thefile = 'myfile'; 
$arr = file($thefile.".txt"); 

foreach ($arr as $data) { 
echo $hostname = gethostbyaddr($data);" <br>"; 
?> 

文本文件包含几个IP的,我知道有关联的名字,但我得到

“警告:gethostbyaddr()[function.gethostbyaddr]:地址是不是有效的IPv4或IPv6地址。 ..“
为每个实例,但最后,它会返回正确的结果。谢谢你的帮助。

+1

如果在不使用'gethostbyaddr()'函数的情况下输出'$ data'变量,它是否会按照您的预期显示? – Novocaine 2013-02-13 15:33:45

+0

是的,实际上我将其作为我的代码的一部分将主机名与IP链接起来。 – fmp66 2013-02-13 15:37:02

回答

1
<?php 

$thefile = 'myfile'; 
$arr = file($thefile . '.txt',FILE_SKIP_EMPTY_LINES); 

foreach ($arr as $data) 
{ 
    $hostname = gethostbyaddr(trim($data)); 
    echo $hostname . "<br>"; 
} 

?> 

您可能遇到一个换行符或一些空白,所以使用trim()传递给函数之前将其删除。

+1

谢谢,那就是诀窍。我很欣赏快速反应 – fmp66 2013-02-13 15:45:34

0

假设输入文件是好的,并且看起来像这样:

100.100.100.100 
    100.100.100.101 
    100.100.100.102 

每PHP手册为file:“返回文件中的阵列的阵列的每个元素对应于一个行的文件中。 ,与换行符仍附。“

你需要去掉这些换行符,使用trim应该做的伎俩。

+0

这正是我需要做的,感谢快速响应。 – fmp66 2013-02-13 15:46:13