可能重复:
强制使用 PHP 下载文件
当我们需要强制用户下载文件时,我们使用带有多个参数/选项的标题。如果我使用怎么办
header("location:test.xlsx");
这是有效的:) 使用这个快捷方式有什么缺点吗?
可能重复:
强制使用 PHP 下载文件
当我们需要强制用户下载文件时,我们使用带有多个参数/选项的标题。如果我使用怎么办
header("location:test.xlsx");
这是有效的:) 使用这个快捷方式有什么缺点吗?
这种方法应该可以解决这里提到的问题
下载.php?filename=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);
当然不要忘记保护它,这样用户就不能下载其他文件
这种方法有几个缺点:
如果文件是浏览器可以读取的文件,则不会下载(如.txt
、.pdf
、.html
、.jpg
、.png
等.gif
),而只是在浏览器中显示
用户获得文件的直接链接。很多时候,您不想要这个,因为他们可以将此链接提供给其他人,所以...
您所做的只是重定向到一个文件。这与他们直接去那里没有什么不同。
如果您尝试强制下载,则需要Content-Disposition
适当地设置标题。
header('Content-Disposition: attachment');
请注意,重定向时不能使用此标头...此标头必须与文件内容一起发送。另见: https ://stackoverflow.com/a/3719029/362536
并非每个文件都被强制下载。
如果您要在 .jpg 上使用该 header(),浏览器将不会打开下载对话框,而只会显示图像。