簡體   English   中英

防止 CSV 文件下載 (CodeIgnitor)

[英]Prevent CSV file downloading (CodeIgnitor)

我需要創建 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);

解決方案

刪除這些 header 行,因為它們用於將文件下載到瀏覽器。

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. 使用有意義的變量名
  2. 要發送 email,我建議使用PHP 郵件程序庫 它使發送 email 變得超級簡單,您只需一行即可添加附件。 在你的情況下:
$mail->addAttachment($temporary_filename);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM