2011-06-28 5 views
1

La première boucle obtient les deux valeurs pour hostkarma. La 2ème boucle échoue pour accredit.habeas et j'obtiens "Argument invalide fourni pour foreach() sur la ligne 11". Où vais-je aller wroge avec la boucle "foreach ($ value as $ val)"?Echec de la boucle 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

utilisez var_dump ($ value) et envoyez-nous plz. – Gerep

+0

A partir du manuel PHP de 'gethostbynamel': _Retourne un ** tableau ** d'adresses IPv4 ou ** FALSE ** si le nom d'hôte n'a pas pu être résolu._ – Karolis

Répondre

3

Vous devez ajouter:

if (is_array($value)) 

juste avant foreach($value as $val) ligne.

Pour les cas où gethostbynamel échoue sa valeur de retour $value n'est pas un tableau provoquant ainsi une erreur Invalid argument supplied for foreach().

+0

Parfait! Merci anubhava –

+0

@JT: De rien. Chaque fois que vous pouvez pls marquer cette réponse comme acceptée pour clôturer ce Q & A. – anubhava

+0

Où puis-je marquer les questions comme acceptées? –

0

La documentation indique que gethostbynamel renvoie FALSE si impossible de résoudre le nom d'hôte et que gethostbyaddr renvoie l'adresse IP non modifiée en cas d'échec.

Vérifiez donc les résultats renvoyés par ces fonctions et faites quelque chose de sensé si l'un d'eux échoue.