【问题标题】:problem with downloading csv file through HTTP header通过 HTTP 标头下载 csv 文件的问题
【发布时间】:2011-05-19 10:46:42
【问题描述】:

所以尝试了这个:

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $fields;

也试过了,还有很多其他的。

header("Content-type: text/csv");

然而,MySQL 数据只是回显到浏览器。

这是我用 firebug 抓取的 HTTPheaderResponse:

Date    Wed, 18 May 2011 14:15:18 GMT
X-Powered-By    PHP/5.1.6
Content-disposition attachment;filename=MyVerySpecial.csv
Connection  close
Content-Length  992
Server  Apache/2.2.3 (Red Hat)

编辑:请注意这是从 JQuery .post() 返回的,我正在尝试这个,如果这会影响它。

那么,有谁知道为什么会出现这个问题?我很茫然。

谢谢

【问题讨论】:

  • 标题前有输出吗?你的代码没问题,应该可以工作
  • 好吧,如果查看我的最新编辑,我正在尝试将其作为 JQuery .post() 的返回,如果这可能会影响它?
  • 它应该只是一个链接。为什么需要 jquery.post?
  • 这是一个额外的页面功能,所以我正在查询数据库以进入文件,而不刷新页面。
  • 哈哈。嗯,是的,这将是重要的信息。 :) 你最好的选择是使用一个实际的表单并做一个传统的帖子......这可以在 iFrame 上完成以保持类似 AJAX 的行为。

标签: php mysql file http-headers


【解决方案1】:

首先,一定要把header()的第二个参数设置为true,就是强制设置header:

header('Content-Type: text/csv');

假设您知道下载的大小,您应该:

header('Content-Length: '.strlen($fields));

最后,确定$fields实际上是一个CSV格式的字符串。

您不能直接打印数组并期望浏览器自动将其转换为 CSV。

【讨论】:

    【解决方案2】:

    正确的 MIME 类型是 text/csv。试试看。

    【讨论】:

      【解决方案3】:

      尝试将Content-type 标记为application/downloadapplication/force-download。这应该会强制浏览器打开保存对话框。

      【讨论】:

        猜你喜欢
        • 2015-07-07
        • 1970-01-01
        • 2010-09-28
        • 2014-02-25
        • 2015-02-06
        • 2014-03-19
        • 1970-01-01
        • 2023-03-31
        • 2014-07-21
        相关资源
        最近更新 更多