簡體   English   中英

如何更正Content-Disposition標頭中的文件名值?

[英]How to correct filename value in Content-Disposition header?

這段代碼幾乎解決了我通過php將查詢保存到.csv問題–但是我不明白為什么當它提示我另存為export.csv ,該文件打開為空白,而file.csv完美地保存了我需要的數據。 我敢肯定,頭文件是很明顯的事情。 有人可以幫忙嗎?

***下面的建議編輯使我達到了這種狀態,它不再保存文件並提示輸入一個空白文件,但是現在顯示了正確的文件,其中包含HTML廢話。 該腳本中沒有其他HTML -我嘗試了許多其他文章的建議。 我該如何解決?

$query = "SELECT * from Table";

$result = mysqli_query($connS, $query);

   $headers = $result->fetch_fields();
foreach($headers as $header) {
    $head[] = $header->name;
}
$fp = fopen('php://output', 'w');

header('Content-Disposition: attachment; filename="export.csv"');
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
    fputcsv($fp, array_values($head)); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    $fp = fopen('file.csv', 'w');
    readfile($fp);
    fclose($fp);

end();

當前,您僅將內容保存到文件中,而不將其發送到用戶的瀏覽器。 也許嘗試在die語句之前添加對readfile的調用。

因此,您的最后一行將如下所示:

    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    readfile($fp);
    die; 
}

Readfile讀取文件並將其寫入輸出緩沖區。 您可以在此處找到有關readfile函數的更多信息。


請注意,您當前的操作方式(先保存文件,然后用戶才能下載),如果兩個用戶同時點擊該頁面,他們可能會mp腳others腳(並在創建的兩個CSV中產生一些奇怪的混合) 。 您可能想要嘗試使用此處接受的答案中的代碼將CSV內容直接直接輸出到用戶的瀏覽器 如果在標頭之后執行此操作,則瀏覽器應將其視為要下載的文件。

暫無
暫無

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

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