2011-06-28 134 views
1

第一個循環獲得hostkarma的2個值就好了。第二個循環失敗了accredit.habeas和我得到「無效參數爲foreach()第11行」。我要去哪裏「foreach($ value as $ val)」循環?Foreach循環失敗

 
$hosts = array('209.49.180.233','209.49.180.234'); 
foreach ($hosts as $host)     // Loop for IP addresses 
{ 
    $rbls = array('hostkarma.junkemailfilter.com','accredit.habeas.com'); 
    foreach ($rbls as $rbl)     // Loop for domains 
    { 
     $hostname = gethostbyaddr($host); 
     $lookup = $hostname . '.' . $rbl; 
     $value = gethostbynamel($lookup); 
    foreach($value as $val)     // loop for multiple record/code values 
      { 
       echo $host, $rbl, $val . "
"; } } }
+0

使用var_dump($ value)併發送給我們plz。 – Gerep

+0

從PHP手冊獲取'gethostbynamel':如果主機名無法解析,則返回IPv4地址的**數組**。**如果主機名無法解析,則返回** FALSE **。 – Karolis

回答

3

您必須添加:

if (is_array($value)) 

之前foreach($value as $val)線。

對於gethostbynamel失敗的情況,其返回值$value不是數組,因此導致Invalid argument supplied for foreach()錯誤。

+0

完美!謝謝anubhava –

+0

@JT:不客氣。無論何時您可以將此答案標記爲已接受以結束此問答。 – anubhava

+0

我在哪裏將問題標記爲已接受? –

0

該文檔說明gethostbynamel返回FALSE如果不能解析主機名,並且gethostbyaddr在失敗時返回未修改的IP地址。

因此,檢查這些函數返回的結果,並在其中一個失敗時做一些明智的事情。