如何创建下载链接以下载文件而不是重定向到浏览器?

时间:2012-09-24 13:07:17

标签: php html

我正在尝试添加一个从服务器下载pdf的链接,而不是重定向浏览器以在另一个页面中打开pdf。我在许多网站上看到过这样的选项但无法获取代码。而且大多数人都认为应该只使用php,任何人都可以帮助我。

4 个答案:

答案 0 :(得分:5)

使用以下代码将其重定向到php页面:

$path_to_file = '/var/www/somefile.pdf'; //Path to file you want downloaded
$file_name = "somefile.pdf"; //Name of file for download
header('Pragma: public');   // required
header('Expires: 0');    // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header('Content-Transfer-Encoding: binary');
readfile($path_to_file);
die();

答案 1 :(得分:3)

或者您可以在.htaccess

中加入此内容
<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

答案 2 :(得分:0)

您有时可以更改http标头:

header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"lol.pdf\"");  
像这样。但是出于安全原因,一些浏览器实际上会阻止这种情况。

修改

因为我意识到这一点尚不清楚。这些标题将从另一个页面发送,该页面实际读入文件并使用这些标题将其发送到浏览器。

然后链接会将它的href属性指向此PHP页面,该页面读入文件并发送标题。

答案 3 :(得分:0)

来自php

    header("Content-Type: application/octet-stream");
    header("Content-Disposition:attachment;filename=myfile.pdf");

然后是文件内容

或者来自Apache

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>