【问题标题】:In php Instead of downloading csv file it gets open in the browser在 php 中,它不是下载 csv 文件,而是在浏览器中打开
【发布时间】:2013-04-17 18:54:46
【问题描述】:

我正在尝试通过浏览器下载 CSV 文件。该脚本部分工作,因为到目前为止我设法在屏幕上显示 CSV,但下载没有开始。

这是我目前尝试过的:

if(isset($currency)) {
    header("Content-Type: application/csv");
    header("Content-Disposition: attachment;Filename=Pricelogs.csv");
    ob_clean();
    $filename = "/tmp/".uniqid().".csv";
    exportCSVFile($filename, $currency, $country, $provider);
    readfile($filename);
    //unlink("'".$filename."'");
} else {
    echo "ERR_USERNAME_PASSWORD";
    exit();
}

我已经阅读了常见问题解答中的所有此类问题并尝试过,但它只能在浏览器上打开,而不是下载。
我还使用了带单引号的标题。 我也试过header("Content-Type: text/csv"); 另外:

    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers 
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=\"".$filename."\";" );
    header("Content-Transfer-Encoding: binary");

【问题讨论】:

    标签: php download force-download


    【解决方案1】:

    输入您的 CSV 文件 URL,它将显示在浏览器中,而不是强制浏览器下载。您可以在您网站的 iframe 中打开它。

    http://docs.google.com/viewer?embedded=true&url=www.yoursite.com/filename.csv

    【讨论】:

    • Yas 替代方案目前来说是一个不错的选择,因为我已经尝试了其他所有方法..非常感谢您的帮助..
    • @PankajDadure 这似乎现在不起作用。任何其他可能的方式来预览 CSV 文件
    【解决方案2】:

    我通常只是这样做:

    header('Content-type: text/csv');
    header("Content-Disposition: attachment; filename=my_csv_filename.csv");
    
    // print CSV lines here
    
    exit();
    

    【讨论】:

    • 实际上我也习惯以相同的方式工作,但知道正如我提到的而不是提示下载,它只是简单地显示在浏览器上。我也在所有主流浏览器上尝试过,我想,可能只是某个浏览器有问题。 Aslo 我在 .htaccess 文件中添加了这一行:AddType application/octet-stream csv
    【解决方案3】:

    我可以告诉你这个组合对我有用:

    $bom = chr(0xEF) . chr(0xBB) . chr(0xBF);
    header("Content-type: application/csv; charset=UTF-8");
    header("Content-Disposition: attachment; filename=$filename.csv");
    header("Pragma: no-cache");
    header("Expires: 0");
    print $bom . $data;
    exit;
    

    如果我是你,我会首先简单地测试这个(在你所有的缓冲之外),首先看看你是否设法使这个工作,然后才在你的特定设置中测试它。

    【讨论】:

    • :感谢 DannyB 的建议,但我已经将其划分为单个模块,即简单地说,但所有内容仅显示在浏览器上。
    【解决方案4】:

    你可以试试这个。

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$filename.csv\";" );
    
    print $content;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2011-11-08
      • 1970-01-01
      • 2020-05-04
      相关资源
      最近更新 更多