php
  • loops
  • foreach
  • infinite
  • 2016-09-28 106 views 1 likes 
    1

    去我使用下面的代码:PHP似乎无限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); 
    } 
    

    一个文件是只读方含电子邮件地址的施氮量。每封电子邮件都会发送一条消息。文件中没有任何更改。

    大多数情况下,它的工作原理绝对正常,只向每个地址发送一条消息。但有时候,它似乎陷入了无限循环,并开始向同一地址发送多条消息。

    如有需要,我可以提供更多详情。

    +1

    在代码中没有任何东西可以导致无限循环。我可以看到多次向同一人发送电子邮件的唯一方法是,它们在'$ file'中多次出现。 –

    +0

    '$ check = file_get_contents('file.txt');'为什么在每次迭代中读取? –

    +0

    顺便说一下,'$ headers。='中的语法错误来自:'...'。 “\ r \ n”;'(一个连字符太多)。 – syck

    回答

    0

    我没有看到任何可能导致无限循环的东西。 带电子邮件地址的文件可能有重复的电子邮件。

    尝试这样确认:

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

    它应该输出是这样的:

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

    谢谢。该列表不包含重复的电子邮件。我刚刚检查过,我知道,因为我只手动编辑它。 –

    0

    你的代码中有一个小错误的时间来连接字符串。

    错误

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

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

    而且我没有看到任何可以产生用foreach无限循环,尝试 '的var_dump($阵列)',以检查是值来找你。

    +0

    感谢您的评论。我会尝试var_dump函数。这可能会有所帮助。然而,大多数时候这个脚本工作得很好。我注意到它不会进入无限循环,而是多次向同一收件人发送相同的电子邮件。 –

    相关问题