2013-03-14 106 views
2

问候语专家,PHP显示CSV文件在Internet Explorer

我有一个PHP脚本,查询我们的数据库,并吐出了一个CSV文件的浏览器。这项工作在FireFox,Safari和Chrome中大显身手。它在Internet Explorer中不起作用,它是我们建筑物(叹气)中的默认浏览器。我无法发布网址,因为它是一个受保护的网站,对你没有任何好处。

在IE中我得到两个弹出式窗口,当我点击临客本报告:

1)无法从下载downloads.html。 无法打开此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; 
} 

回答

0

有两个问题,我认为。首先,你需要引用文件名,其次是你需要添加一个Content-Length标题来显示下载时间。

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

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

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

+0

感谢雨果,但没有运气与这些变化。我甚至尝试过头(“Content-type:application/octet-stream”); 没有运气 – 2013-03-14 15:47:34

+0

那么我想阿德里安是正确的,IE浏览器只是不期望带有HTML扩展的动态内容。 – 2013-03-14 15:59:12

0

根据我的经验,使用IE浏览器(尤其是旧版本的IE)需要使用mod_rewrite将带有正确文件扩展名(例如download/file.csv)的URL重定向到生成CSV输出的PHP文件。由于某种原因,IE更喜欢通过内容类型和内容处理标头的URL文件扩展名。