codeigniter 阻止CSV文件下载(CodeIgnitor)

rsl1atfo  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(102)

我需要创建csv,然后将其作为附件发送到邮件。我正在使用标题,这是让我下载的csv文件。如果我删除下面的CSV则没有创建。

header('Content-Type: text/csv');

我不想下载该文件,而是将其保存在一些临时文件夹中,然后将其作为邮件附件发送。
下面是我所做的。

$this->load->library('excel');
    $filename = tempnam(sys_get_temp_dir(), 'export') . '.csv';
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment;filename="'.$filename.'"');
  //$f = fopen('php://output', 'w');
    $f = fopen($filename, 'w');
    $csv_header =  array("name","number","address"); 
    fputcsv($f, $csv_header);
    ob_flush();
    flush();
    foreach ($data as $value) {
            $data_array = array($value['name'],$value['number'],$value['address']);
            fputcsv($f, $data_array);
            }
        }
    fclose($f);
a14dhokn

a14dhokn1#

    • 解决方案**

删除这些标题行,因为它们用于将文件下载到浏览器。

header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="'.$filename.'"');

在服务器端,您应该只需要

$this->load->library('excel');
$temporary_filename = tempnam(sys_get_temp_dir(), 'export') . '.csv';
    
$file_write_stream = fopen($temporary_filename, 'w');
$csv_header =  array("name","number","address"); 
fputcsv($file_write_stream, $csv_header);
    
foreach ($data as $value) {
    fputcsv($file_write_stream, array($value['name'], $value['number'], $value['address']));
}

fclose($file_write_stream);
    • 专业建议:**

1.使用有意义的变量名
1.对于发送电子邮件,我建议使用PHP mailer library。它使发送电子邮件变得超级简单,你可以添加一个附件,只需要一行。

$mail->addAttachment($temporary_filename);

相关问题