Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPMailer,附件设置可以';t访问文件(csv文件)_Php_Csv_Phpmailer - Fatal编程技术网

PHPMailer,附件设置可以';t访问文件(csv文件)

PHPMailer,附件设置可以';t访问文件(csv文件),php,csv,phpmailer,Php,Csv,Phpmailer,我正在运行一个PHP脚本,它运行一系列SQL查询,将结果写入CSV并保存。它还将报告邮寄给收件人 代码的CSV部分工作正常,PHPMailer部分发送测试电子邮件没有问题。然而,当我取消注释PHPMailer的附件部分并运行脚本时,它会说“无法访问文件”。当我替换注释时,它会写入文件并再次发送测试电子邮件 我相应地注释/取消注释的行是:$mail->addAttachment($fp) 所以,这两个部分都在工作,但这是我第一次使用PHPMailer,我不确定解决这个问题的最佳方法。据我所知,我正

我正在运行一个PHP脚本,它运行一系列SQL查询,将结果写入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 = "hnorman@jacksonfurnind.com";

            try{
            $mail->setFrom("hnorman@jacksonfurnind.com");
            $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);

这是因为
$fp
是一个打开的文件句柄;phpMail需要一个字符串,该字符串包含要传递到
addAttachment()
的文件路径。因此,在创建PHPMailer实例之前,将
fclose
调用移动到,然后执行以下操作:

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

这工作完美无瑕,我完全忽略了一个事实,即它无法使用该手柄。谢谢