![](/img/trans.png)
[英]PHP Content-Disposition header: Specialcharacters in the filename
[英]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.