[英]Download xlsx file using php
我需要從我的網站下載xlsx
文件(但不是像這樣直接打開文件網址: http://site.com/file.xlsx
: http://site.com/file.xlsx
)
所以,這是php代碼
$file = "somefile.xlsx";
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
文件已下載,他的擴展名是.xlsx
,但是當嘗試在 ms excel 中打開此文件時,文件未打開並且出現錯誤: excel cannot open the file.xlsx because the file format or file extension is not valid
請告訴,為什么會這樣? 我錯在哪里?
多年后,我遇到了同樣的問題,經過搜索,我再次來到這里 ))
這是解決方案,對我有用:
$file = "somefile.xlsx";
// define file $mime type here
ob_end_clean(); // this is solution
header('Content-Description: File Transfer');
header('Content-Type: ' . $mime);
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file) . "\"");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile($file);
您必須在其他文件中間使用此代碼。
標題的問題是它們需要首先在頁面上設置。 如果您在它們之前甚至有 1 個空格回響,它們將無法工作。 所以你需要在設置標題之前 ob_clean() [清理緩沖區]
嘗試
ob_clean();
flush();
$file = "somefile.xlsx";
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
消除:
ob_clean();
flush();
在代碼末尾添加:
exit();
問題是,flush() 也會在你的 *.xlsx 文件內容中拋出一些垃圾,這會破壞你的文件,即使你使用 ob_clean();
為了更好地理解,請訪問 php.net 並閱讀 flush() 和 ob_flush() 之間的區別,並發現在第一種情況下您甚至不需要它們。 因此,您也不需要 ob_clean()。
這對我有用:
header('Content-Description: File Transfer');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment; filename=\"".basename($fileLocation)."\"");
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Length: ' . filesize($fileLocation)); //Remove
ob_clean();
flush();
readfile($fileLocation);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.