【问题标题】:PHP Displaying CSV File in Internet ExplorerPHP 在 Internet Explorer 中显示 CSV 文件
【发布时间】:2013-03-14 23:33:23
【问题描述】:

问候专家,

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

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

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

2) 下载百分比信息窗口: 获取文件信息: downloads.html 来自 预计剩余时间: 下载到: 传输率: 这些都是空的。

所以,我有一个页面,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;
}

【问题讨论】:

    标签: php csv


    【解决方案1】:

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

    //1
    header("Content-Disposition: attachment; filename=\"file.csv\"");
    
    //2
    header("Content-Length: " . (strlen($column_headers.$rows)));
    

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

    【讨论】:

    • 感谢 Hugo,但这些更改并不顺利。我什至尝试了 header("Content-type: application/octet-stream");没有运气
    • 那么我猜 Adrian 是对的,而 IE 并不期待带有 HTML 扩展的动态内容。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 2011-02-11
      • 2010-11-24
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多