php
  • loops
  • foreach
  • infinite
  • 2016-09-28 110 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函數。這可能會有所幫助。然而,大多數時候這個腳本工作得很好。我注意到它不會進入無限循環,而是多次向同一收件人發送相同的電子郵件。 –

    相關問題