2017-10-10 5 views
1

SQL 쿼리 시퀀스를 실행하고 결과를 CSV에 쓰고 저장하는 PHP 스크립트를 실행하고 있습니다. 또한 보고서를받는 사람에게 보냅니다.PHPMailer, 첨부 파일 설정에서 파일 (csv 파일)에 액세스 할 수 없습니다.

코드의 CSV 부분은 완벽하게 작동하며 PHPMailer 부분은 문제없이 테스트 전자 메일을 보냅니다. 그러나 PHPMailer의 첨부 부분을 주석으로 처리하고 스크립트를 실행하면 "파일에 액세스 할 수 없습니다"라는 메시지가 나타납니다. 주석을 바꾸면 파일을 쓰고 테스트 이메일을 다시 보냅니다.

내가 언급 문제의 라인/주석 따라서,이다 : $mail->addAttachment($fp);

그래서, 두 가지가 작동하지만,이 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

, 나는 완전히 그것을 그 핸들을 사용할 수 없다는 사실을 간과. 감사! –