PHP/MYSQL 到 CSV 导出代码打印到屏幕而不是 CSV 文件

标签 php mysql csv export-to-csv

我无法让浏览器提示下载。输出反而显示在屏幕上。我在这个网站上尝试了很多关于这个主题的其他话题,但都无济于事。我可以将 fopen("php://output","w") 更改为 fopen("export.csv","w") 但这将节省服务器上 export.csv 文件的副本,我不想要它。我希望文件在客户端下载而不保存在服务器上。这是我的代码:

$sql = mysql_query($_SESSION["export-query"]);
$fields = mysql_num_fields($sql);
$header = array();

for ($i = 0; $i < $fields; $i++) {
    $header[] = mysql_field_name($sql, $i);
}

$f = fopen("php://output","w"); 
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=export.csv');
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate');
fputcsv($f, $header);

while ($row = mysql_fetch_row($sql)) {
    fputcsv($f, $row);
}
fclose($f);

求助!非常感谢。

最佳答案

你的代码和我的很接近,但我有这个

header("Content-type: application/vnd.ms-excel");

为内容类型。我认为这是可行的,因为浏览器知道如何处理 text/csv 但他们不知道如何处理 excel。它会提示下载,因为它不会自己打开这种类型的文件。

我也没有“必须重新验证”,但我认为这没有什么不同。

编辑:

这是我的完整 header ,它们在 100% 的时间内都有效。与您的略有不同,所以可能其中之一是原因。

    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: attachment; filename=".$filename.".csv");
    header("Pragma: no-cache");
    header("Expires: 0");

编辑 2:

从您对答案的评论来看,您将所有这些代码作为 ajax 调用放在 div 中。不起作用的原因是您只能在初始调用页面时设置标题。在 ajax 调用上设置 header 将被忽略。

以下是我的系统处理 csv 生成的方式。因为我需要的特定信息可能因不同的 csv 文件而异,所以我将生成器文件的名称放入表单的“操作”中并提供了一个提交按钮:

<form action="thegeneratorpage.php" method="get"><fieldset>
     <p>Download [...] in .csv (Excel) form.  You can narrow by [...].</p>
     <!-- code here that allows users to narrow down what is in the csv -->
     <input type="submit" value="Download" />
</fieldset></form>

如果信息没有变化,你可以这样做:

<a href="thegeneratorpage.php">Download CSV</a>

我们一直在讨论的所有代码都在 thegeneratorpage.php 上。

关于PHP/MYSQL 到 CSV 导出代码打印到屏幕而不是 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395297/

相关文章:

excel - 用双引号封装输出

php - 在 PHP 中使用 settype 而不是使用括号进行类型转换,有什么区别?

php - 我的 Composer 不会用 Laravel 4 完全更新它被 artisan 卡住了

php - 如何动态地将数据从数据库放到 session 中

Python for 循环重复

mysql 获取每个单词的第一个字母

php - PHP 如何在使用多个引号时进行 echo

php if else 语句在选择框中

python - Pandas:如何比较导入的 csv 文件的列以确保它们相同?

javascript - 在 javascript 中解析 csv 文件并根据两个特定行提取字典