首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP强制下载文件

使用PHP强制下载文件
EN

Stack Overflow用户
提问于 2009-09-23 20:06:18
回答 8查看 178.3K关注 0票数 65

我的服务器上有一个CSV文件。如果用户点击了本应下载的链接,但它却在我的浏览器窗口中打开。

我的代码如下所示

代码语言:javascript
复制
<a href="files/csv/example/example.csv">
    Click here to download an example of the "CSV" file
</a>

这是一个普通的work服务器,我所有的开发工作都在它上面。

我试过这样的方法:

代码语言:javascript
复制
<a href="files/csv/example/csv.php">
    Click here to download an example of the "CSV" file
</a>

现在我的csv.php文件的内容如下:

代码语言:javascript
复制
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');

现在我的问题是它正在下载,但不是我的CSV文件。它会创建一个新文件。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-23 12:09:02

.htaccess解决方案

要暴力强制下载服务器上的所有CSV文件,请添加您的.htaccess文件:

代码语言:javascript
复制
AddType application/octet-stream csv

PHP解决方案

代码语言:javascript
复制
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
readfile("/path/to/yourfile.csv");
票数 110
EN

Stack Overflow用户

发布于 2014-02-12 23:51:07

或者,您可以使用HTML5来完成此操作。简单地使用

代码语言:javascript
复制
<a href="example.csv" download>download not open it</a>
票数 27
EN

Stack Overflow用户

发布于 2009-11-03 22:26:55

这里有一个更安全的浏览器解决方案:

代码语言:javascript
复制
    $fp = @fopen($yourfile, 'rb');

    if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
{
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="yourname.file"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: binary");
    header('Pragma: public');
    header("Content-Length: ".filesize($yourfile));
}
else
{
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="yourname.file"');
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Pragma: no-cache');
    header("Content-Length: ".filesize($yourfile));
}

fpassthru($fp);
fclose($fp);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1465573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档