2017-10-10 8 views
1

私は一連のSQLクエリを実行し、結果をCSVに書き込み、保存するPHPスクリプトを実行しています。レポートを受信者にメールします。PHPMailer、添付ファイルの設定でファイルにアクセスできない(csvファイル)

コードのCSV部分は完全に機能し、PHPMailer部分は問題のないテスト電子メールを送信します。しかし、私がPHPMailerの添付部分をコメント解除してスクリプトを実行すると、「ファイルにアクセスできませんでした」と表示されます。コメントを置き換えると、ファイルが書き込まれ、テスト電子メールが再度送信されます。私はそれに応じてコメントを解除/コメント

問題の行は、次のとおりです。$mail->addAttachment($fp);

ので、2枚が働いているが、これはphpmailerのを使用して私の最初の時間であること、私は行くための最善の方法はよく分かりませんこれを固定することについて。私が知る限り、私はaddAttachmentコードを適切に使用しており、私は最後にCSVを閉じています。

ご迷惑をおかけして申し訳ありません。

スクリプト:

   if (!$result) die('Couldn\'t fetch records'); 
      $num_fields = mysqli_num_fields($result); 
      $headers = array(); 
      while ($fieldinfo = mysqli_fetch_field($result)) { 
       $headers[] = $fieldinfo->name; 
      } 
      $fp = fopen('dailyReportTestPHP.csv', 'w'); 
      if ($fp && $result) { 
       fputcsv($fp, $headers); 
       while ($row = $result->fetch_array(MYSQLI_NUM)) { 
        fputcsv($fp, array_values($row)); 
       } 

      } 


      $mail = new PHPMailer(true); 
      $address = "[email protected]"; 

      try{ 
      $mail->setFrom("[email protected]"); 
      $mail->addAddress($address); 
      $mail->addAttachment($fp); 
      $mail->isHTML(true); 
      $mail->Subject = "Test"; 
      $mail->Body  = "Test"; 
      $mail->Send(); 
      echo 'message sent'; 

      } catch (Exception $e){ 
       echo 'message failed'; 
       echo 'mail error:' . $mail->ErrorInfo; 
      } 

      fclose($fp); 

答えて

1

$fpがオープンファイルハンドルであるためです。 PHPMailerは、ファイルへのパスを含む文字列がaddAttachment()に渡されることを期待しています。だから、これを行う、あなたはphpmailerのインスタンスを作成する前にfclose呼び出しを移動し、:これは完璧に働い

$mail->addAttachment('dailyReportTestPHP.csv'); 
+0

は、私は完全にそれがそのハンドルを使用することができなかったという事実を見落とし。ありがとう! –

関連する問題