2013-02-13 81 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