繁体   English   中英

如何更正Content-Disposition标头中的文件名值?

[英]How to correct filename value in Content-Disposition header?

这段代码几乎解决了我通过php将查询保存到.csv问题–但是我不明白为什么当它提示我另存为export.csv ,该文件打开为空白,而file.csv完美地保存了我需要的数据。 我敢肯定,头文件是很明显的事情。 有人可以帮忙吗?

***下面的建议编辑使我达到了这种状态,它不再保存文件并提示输入一个空白文件,但是现在显示了正确的文件,其中包含HTML废话。 该脚本中没有其他HTML -我尝试了许多其他文章的建议。 我该如何解决?

$query = "SELECT * from Table";

$result = mysqli_query($connS, $query);

   $headers = $result->fetch_fields();
foreach($headers as $header) {
    $head[] = $header->name;
}
$fp = fopen('php://output', 'w');

header('Content-Disposition: attachment; filename="export.csv"');
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
    fputcsv($fp, array_values($head)); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    $fp = fopen('file.csv', 'w');
    readfile($fp);
    fclose($fp);

end();

当前,您仅将内容保存到文件中,而不将其发送到用户的浏览器。 也许尝试在die语句之前添加对readfile的调用。

因此,您的最后一行将如下所示:

    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    readfile($fp);
    die; 
}

Readfile读取文件并将其写入输出缓冲区。 您可以在此处找到有关readfile函数的更多信息。


请注意,您当前的操作方式(先保存文件,然后用户才能下载),如果两个用户同时点击该页面,他们可能会mp脚others脚(并在创建的两个CSV中产生一些奇怪的混合) 。 您可能想要尝试使用此处接受的答案中的代码将CSV内容直接直接输出到用户的浏览器 如果在标头之后执行此操作,则浏览器应将其视为要下载的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM