在php中,它不是下载csv文件,而是在浏览器中打开

在php中,它不是下载csv文件,而是在浏览器中打开,php,download,force-download,Php,Download,Force Download,我正在尝试通过浏览器下载CSV文件。脚本部分工作正常,因为到目前为止,我设法在屏幕上显示CSV,但下载尚未开始 以下是我迄今为止所做的尝试: if(isset($currency)) { header("Content-Type: application/csv"); header("Content-Disposition: attachment;Filename=Pricelogs.csv"); ob_clean(); $filename = "/tmp/".u

我正在尝试通过浏览器下载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();
}
我已经阅读了FAQ中的所有此类问题,也尝试过,但它只在浏览器上打开,而不是下载。
我还使用了带有单引号的标题。 我还尝试了
标题(“内容类型:text/csv”)
此外:

我通常只做:

header('Content-type: text/csv');
header("Content-Disposition: attachment; filename=my_csv_filename.csv");

// print CSV lines here

exit();

我可以告诉你,这种组合对我很有效:

$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;
如果我是你,我会首先明确地测试它(在你所有的缓冲区之外),首先看看你是否能做到这一点,然后在你的特定设置中测试它。

你可以试试这个

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;

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


实际上,我也用同样的方式工作,但正如我所提到的,它只是简单地显示在浏览器上,而不是提示下载。我在所有mazor浏览器上都试过了,我想,仅仅在某个浏览器上可能会有问题。另外,我在.htaccess文件中添加了这一行:AddType application/octet stream csv:谢谢你的建议DannyB,但我已经通过将其划分为单个模块进行了工作,也就是说,简单地说,但所有内容仅在浏览器上显示。Yas alternative是目前最好的选择,因为我已经尝试了所有其他的方法。非常感谢你的帮助。@PankajDadure现在似乎不起作用。预览CSV文件的任何其他可能方式
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;