2011-06-28 101 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地址。

因此,检查这些函数返回的结果,并在其中一个失败时做一些明智的事情。