使用PHP创建和下载CSV

时间:2010-09-17 19:09:42

标签: php http-headers

我正在使用PHP从数据库查询创建CSV文件。 我运行查询,设置标题,并在Firefox中加载页面,文件提示下载并在excel中打开,就像它应该的那样。 当我在IE中尝试它时,我收到一条错误Internet Explorer cannot download ReportPrint.php from www.website.com.
Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.

不知道如何解决这个问题。

header('Content-Description: File Transfer');
header("Content-Type: application/csv") ;
header("Content-Disposition: attachment; filename=Report.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo "record1,record2,record3\n";

4 个答案:

答案 0 :(得分:3)

当Internet Explorer无法缓存文件并且您似乎试图避免缓存时,它往往会显示这些错误消息。尝试这样的事情:

<?php

$seconds = 30;

header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$seconds) . ' GMT');
header('Cache-Control: max-age=' . $seconds . ', s-maxage=' . $seconds . ', must-revalidate, proxy-revalidate');

session_cache_limiter(FALSE); // Disable session_start() caching headers
if( session_id() ){
    // Remove Pragma: no-cache generated by session_start()
    if( function_exists('header_remove') ){
        header_remove('Pragma');
    }else{
        header('Pragma:');
    }
}

?>

根据自己的喜好调整$seconds,但不要将其设置为零。

使用mod_rewrite使IE相信下载是静态文件也很有帮助,例如http://example.com/Report.csv

请报告并告知它是否适合您。

答案 1 :(得分:1)

删除Pragma: no-cache标题。此标头阻止IE下载文件。

答案 2 :(得分:0)

检查IE的安全设置,可能是配置为不下载CSV文件。

答案 3 :(得分:-2)

更改

header("Content-Disposition: attachment; filename=Report.csv");

header("Content-Disposition: attachment;filename=Report.csv");