强制用户在PHP中下载文件

时间:2012-06-07 14:38:04

标签: php header

  

可能重复:
  Forcing to download a file using PHP

当我们需要强制用户下载文件时,我们使用header with several parameters/options.如果我使用

该怎么办?
header("location:test.xlsx");

这很有效:)使用这个快捷方式有什么缺点吗?

4 个答案:

答案 0 :(得分:1)

这种方法有一些缺点:

  1. 如果该文件是浏览器可以阅读的文件,则不会下载(例如.txt.pdf.html.jpg,{{ 1}},.png等等,但只是在浏览器中显示

  2. 用户可以直接链接到该文件。很多时候,你不希望这样,因为他们可以将此链接提供给其他人,所以......

    1. 会花费更多带宽
    2. 它不能用于私人文件
    3. 如果是图片,他们可以热链接到它

答案 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上使用那个标题(),浏览器将无法打开下载对话框,只会显示图像。