2017-08-01 19 views
0

私のコード内の 'for'ループは、次のパスに移動する前にコードを複数回最初に実行することを繰り返します。ループは3回繰り返されますが、スクリプトは最初の繰り返しで複数回実行されます。私は、エラーログに、次のを見たとき、私はこれを実現:PHPのループForループを繰り返す/

に送信される[アメリカ/ニューヨークは午前15時03分42秒24 - 7月-2017]:*
[24-7月 - 2017 15:03: 42アメリカ/ニューヨーク] 1
[24-Jul-2017 15:03:48 アメリカ/ New_York]送信先:*
[24-Jul-2017 15:03:49 アメリカ/ニューヨーク] 1
[24-Jul -2017 15:03:55 America/New_York] を送信しました:*
[24-Jul-2017 15:03:55アメリカ/ニューヨーク] 1
[24-Jul-2017 15:04:01 America/New_York]送信先:*
[24-Jul-2017 15:04:01 アメリカ/ New_Yor k] 1
[24-Jul-2017 15:04:07アメリカ/ニューヨーク]送信 に:
[24-Jul-2017 15:04:08 America/New_York] 1
[24-Jul-2017 15 :04:14 America/New_York]送信先:*
[24-Jul-2017 15:04:14 アメリカ/ニューヨーク] 1
[24-Jul-2017 15:04:20アメリカ/ニューヨーク]送信 : *
[24-Jul-2017 15:04:20アメリカ/ニューヨーク] 1
[24-Jul-2017 15:04:26アメリカ/ New_York]送信先:*
[24-Jul-2017 15:04: 26 アメリカ/ニューヨーク] 1
[24-Jul-2017 15:04:32アメリカ/ニューヨーク] No メッセージが届きました!
[24-Jul-2017 15:04:32 America/New_York] 2
[24-Jul-2017 15:04:38 America/New_York]メッセージは受信されませんでした。
[24-7月 - 2017年夜03時04分38秒アメリカ/ニューヨーク] 3

私はそれが各ループの最後でログにループカウントを書きました、そして、あなたは最初が繰り返されていることがわかります一回以上。私のループに関連するコードは次のとおりです:

for ($count = 0; $count < 4; $count++) { 

// Do STUFF HERE 
// ERROR_LOG when a successful message has been sent 

error_log($count); 
sleep(5); 
} 

私はこのコードが大丈夫なので、なぜ起こっているのか分かりません。それはサーバーの問題だろうか?あるいは、コードの残りの部分がループに影響しているのでしょうか?正しい時間をどのようにループさせるには?

これが使用できる場合は、これは私が使用している完全なコードです。基本的には、電子メールの添付ファイルをSQLデータベースにある電子メールアドレスのグループに転送します。

// INCLUDE FUNCTIONS FOR OPENING EMAIL ATTACHMENT 

include('attach.php'); 

// OPEN EMAIL AND CHECK FOR ATTACHMENT 

for ($count = 0; $count < 4; $count++) { 


/* connect to gmail */ 
$hostname = '***'; 
$username = '***'; 
$password = '***'; 
/* try to connect */ 
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

/* grab emails */ 
$emails = imap_search($inbox,'ALL'); 

$max_emails = 16; 


/* if any emails found, iterate through each email */ 
if($emails) { 

    $count = 1; 

    /* put the newest emails on top */ 
    rsort($emails); 

    /* for every email... */ 
    foreach($emails as $email_number) 
    { 

     /* get information specific to this email */ 
     $overview = imap_fetch_overview($inbox,$email_number,0); 

     /* grab sender's phone number */ 
     foreach ($overview as $msgparts){ 
     $fromaddress = $msgparts->from; 
     $fromnumber = explode("@", $fromaddress); 
     $sendernumber = substr($fromnumber[0], -10);  
     } 

    /* check if sender's number is in the database */ 
$servername = "localhost"; 
$username = "***"; 
$password = "***"; 
$dbname = "***"; 

$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    error_log("Connection failed: " . $conn->connect_error); 
    goto end; 
} 

$sql = "SELECT * FROM Members WHERE Phone_Number LIKE '$sendernumber'"; 
$result = $conn->query($sql); 

if (mysqli_num_rows($result) == 0) {  
$conn->close(); 
    error_log("Member number (" . $sendernumber . ") not recognized!"); 
    goto end; 
} else { 
     $conn->close(); 
} 
} 

     $message = imap_fetchbody($inbox,$email_number,2); 

     /* get mail structure */ 
     $structure = imap_fetchstructure($inbox, $email_number); 

     $attachments = array(); 

     /* if any attachments found... */ 
     if(isset($structure->parts) && count($structure->parts)) 
     { 
      for($i = 0; $i < count($structure->parts); $i++) 
      { 
       $attachments[$i] = array(
        'is_attachment' => false, 
        'filename' => '', 
        'name' => '', 
        'attachment' => '' 
       ); 

       if($structure->parts[$i]->ifdparameters) 
       { 
        foreach($structure->parts[$i]->dparameters as $object) 
        { 
         if(strtolower($object->attribute) == 'filename') 
         { 
          $attachments[$i]['is_attachment'] = true; 
          $attachments[$i]['filename'] = $object->value; 
         } 
        } 
       } 

       if($structure->parts[$i]->ifparameters) 
       { 
        foreach($structure->parts[$i]->parameters as $object) 
        { 
         if(strtolower($object->attribute) == 'name') 
         { 
          $attachments[$i]['is_attachment'] = true; 
          $attachments[$i]['name'] = $object->value; 
         } 
        } 
       } 

       if($attachments[$i]['is_attachment']) 
       { 
        $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1); 

        /* 3 = BASE64 encoding */ 
        if($structure->parts[$i]->encoding == 3) 
        { 
         $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']); 
        } 
        /* 4 = QUOTED-PRINTABLE encoding */ 
        elseif($structure->parts[$i]->encoding == 4) 
        { 
         $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']); 
        } 
       } 
      } 
     } 

     /* iterate through each attachment and save it */ 
     foreach($attachments as $attachment) 
     { 
      if($attachment['is_attachment'] == 1) 
      { 
       //error_log($attachment['name']); 
       //error_log($attachment['attachment']); 
       $filetype = substr($attachment['name'], -3); 
       //$filename = $attachment['name']; 
       if (($filetype == "txt") || ($attachment['name'] == "")) { 
       $filename = "message.txt"; 
       if(empty($filename)) $filename = $attachment['filename']; 

       if(empty($filename)) $filename = time() . ".dat"; 

       /* prefix the email number to the filename in case two emails 
       * have the attachment with the same file name. 
       */ 
       //$fp = fopen("./" . $email_number . "-" . $filename, "w+"); 
       $fp = fopen("./message.txt", "w+"); 
       fwrite($fp, $attachment['attachment']); 
       fclose($fp); 
        } 
        else { 
        //not a text message 
        } 
      } 
    } 
} 


// EXTRACT EMAIL ATTACHMENT TO TEXT FILE 

If (file_exists("message.txt")) { 

$emailmessage = fopen("message.txt", "r") or die("Unable to open file!"); 
$relaymessage = fread($emailmessage,filesize("message.txt")); 
fclose($emailmessage); 
unlink ("message.txt"); 
} else { 
    error_log("No message received!"); 
    goto end; 
} 

// FORWARD ATTACHMENT TO ALL USERS IN DATABASE 

If ($relaymessage != "") { 

$servername = "localhost"; 
$username = "***"; 
$password = "***"; 
$dbname = "***"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) { 
    //die("Connection failed: " . $conn->connect_error); 
    error_log("Connection failed: " . $conn->connect_error); 
    goto end; 
} 

$sql = "SELECT Address FROM Members"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) {  
    while($row = $result->fetch_assoc()) { 
     $sent=normal($row["Address"], $relaymessage, "", 1); 
     error_log("Sent to: " . $row["Address"]); 
} 
} else { 
     error_log("Error: " . $row["Address"]); 
} 

$conn->close(); 

} else { 
    error_log("Message is blank"); 
    goto end; 
} 

end: 
imap_delete($inbox,$email_number); 
imap_expunge($inbox); 
imap_close($inbox), CL_EXPUNGE); 
error_log($count); 
sleep(5); 
} 


function normal($to,$message,$oper,$num) 
{ 
$adhead=""; 
for($i=1;$i<=$num;$i++) 
{ 
$sent=mail($to, "", $message, $adhead); 
} 
if($sent) 
{ 
echo "<h1>Mail sent successfully to $to</h1>"; 
} 
else 
{ 
echo '<h1>Mail not sent!</h1>'; 
} 
} 

答えて

1

あなたがここで問題があります。

if($emails) { $count = 1;//<====== 

$countforループ内で使用されているが、それはインサイダーifで編集しています!

したがって、別の変数名を使用する必要があります。

関連する問題