当我们需要强制用户下载文件时,我们使用header with several parameters/options.如果我使用
该怎么办?header("location:test.xlsx");
这很有效:)使用这个快捷方式有什么缺点吗?
答案 0 :(得分:1)
这种方法有一些缺点:
如果该文件是浏览器可以阅读的文件,则不会下载(例如.txt
,.pdf
,.html
,.jpg
,{{ 1}},.png
等等,但只是在浏览器中显示
用户可以直接链接到该文件。很多时候,你不希望这样,因为他们可以将此链接提供给其他人,所以......
答案 1 :(得分:1)
这种方法应该解决这里提到的问题
的download.php?文件名= test.xlsx
if isset ($_GET['filename']){
$filename = $_GET['filename']
}
else{
die();
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
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);
当然不要忘记确保这一点,以便用户无法下载其他文件
答案 2 :(得分:0)
您所做的只是重定向到文件。这与直接进入它的情况没什么不同。
如果您尝试强制下载,则需要适当设置Content-Disposition
标题。
header('Content-Disposition: attachment');
请注意,重定向时不能使用此标头...此标头必须与文件内容一起发送。另见:https://stackoverflow.com/a/3719029/362536
答案 3 :(得分:0)
并非每个文件都被强制下载。
如果你在.jpg上使用那个标题(),浏览器将无法打开下载对话框,只会显示图像。