2016-09-28 2 views
1

J'utilise le code suivant:PHP semble aller dans une boucle infinie foreach

$array = explode("\n", file_get_contents($file)); 
// Here $file contains n e-mail addresses 


foreach ($array as $value) { 
    $check = file_get_contents('file.txt');  
    $subject = 'Subject (' . $entry . ')'; 
    $to = $value; 

    if ($check < $credits){ 
     $message = '...'; 
    } 
    else{ 
     $message = '...'; 
    } 
    $headers = 'MIME-Version: 1.0' . "с\r\n"; 
    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 
    $headers .= 'From: '...' . "\r\n"; 
    mail($to, $subject, $message, $headers); 
} 

Un fichier est lu containg quantité n d'adresses e-mail. Pour chaque e-mail, un message est envoyé. Rien n'est changé dans le fichier.

La plupart du temps, cela fonctionne parfaitement et envoie un seul message à chaque adresse. Parfois, cependant, il semble aller dans une boucle infinie et commence à envoyer plusieurs messages aux mêmes adresses.

Si nécessaire, je peux fournir des détails supplémentaires.

+1

Il n'y a rien que je puisse voir dans ce code qui provoquerait une boucle infinie. La seule façon que je peux voir si envoyer des e-mails plusieurs fois à la même personne est si elles apparaissent plusieurs fois dans '$ file'. –

+0

'$ check = file_get_contents ('file.txt');' pourquoi lire ceci à chaque itération? –

+0

Btw, erreur de syntaxe dans '$ headers. = 'De:' ... '. "\ r \ n"; '(un trait d'union trop). – syck

Répondre

0

Je ne vois rien qui puisse causer une boucle infinie ici. Le fichier contenant les adresses e-mail contient probablement des e-mails en double.

Essayez quelque chose comme ceci pour confirmer:

$array = explode("\n", file_get_contents($file)); 
print_r(array_count_values($array)); 

Il devrait afficher quelque chose comme ceci:

Array 
(
[[email protected]] => 2 
[[email protected]] => 1 
[[email protected]] => 3 
... 
) 
+0

Merci. La liste ne contient pas d'e-mails en double. Je viens de le vérifier et j'en suis certain car je ne l'édite que manuellement. –

0

Votre code a une petite erreur dans le temps pour concaténer la chaîne.

Mauvais

$headers .= 'From: '...' . "\r\n"; 

droit

$headers = 'From: . \ R \ n"; 

Et je ne vois rien qui peut générer boucle infinie avec foreach, essayez un 'var_dump ($ array)', pour vérifier les valeurs qui sont vient à vous.

+0

Merci pour le commentaire. Je vais essayer la fonction var_dump en effet. Cela peut être utile. Cependant, le script fonctionne très bien la plupart du temps. Ce que j'ai remarqué, c'est qu'il ne va pas dans une boucle infinie mais envoie plutôt le même courriel au même destinataire plusieurs fois. –