3

问候专家,

我有一个 php 脚本,可以查询我们的数据库并在浏览器中输出一个 csv 文件。这项工作在 FireFox、Safari 和 Chrome 中更有效。它在我们大楼的默认浏览器 Internet Explorer 中不起作用(叹气)。我无法发布网址,因为它是受保护的网站,对您没有任何好处。

在 IE 中,当我单击此报告的链接时,我得到两个弹出窗口:

1) 无法从 下载 downloads.html。无法打开此 Internet 站点。请求站点不可用或找不到请稍后再试。

2) 下载百分比信息窗口:获取文件信息:downloads.html from Estimated time left: Download to: Transfer rate: 所有这些都是空的。

所以,我有一个页面,downloads.html 试图生成一个 CSV 文件。就 IE 而言,不确定这里发生了什么轰炸。我可以尝试不同的标题吗?我在搜索中没有看到任何东西。

感谢您的任何提示...

这是我打印出数据的函数:

# $data is array of data from database
function render_excel($data) {
  # headers for browsers
  header("Content-type: text/csv");
  header("Content-Disposition: attachment; filename=file.csv");
  header("Pragma: no-cache");
  header("Expires: 0");

  # column headers
  $column_headers = "Filename, Link to File, Details, Unique Viewers\n";
  $rows = '';
  foreach($data as $foo => $arr){   
    $rows .= $arr['filename'].",";
    $rows .= $arr['resource_url'].",";
    $rows .= $arr['detail_url'].",";
    $rows .= $arr['distinct_views']."\n";
  }
  print $column_headers;
  print $rows;
}
4

2 回答 2

1

我认为有两个问题。首先是您需要在文件名周围加上引号,其次是您需要添加Content-Length标题以显示下载时间。

//1
header("Content-Disposition: attachment; filename=\"file.csv\"");

//2
header("Content-Length: " . (strlen($column_headers.$rows)));

请记住,如果您的页面上有其他代码,长度可能会有所不同。

于 2013-03-14T15:29:28.147 回答
-1

根据我的经验,要让它与 IE 一起工作——尤其是旧版本的 IE——需要使用 mod_rewrite 将具有正确文件扩展名(例如下载/file.csv)的 URL 重定向到生成 CSV 输出的 PHP 文件。IE 出于某种原因更喜欢 URL 文件扩展名而不是 content-type 和 content-disposition 标头。

于 2013-03-14T15:33:23.243 回答