我以前见过这个问题,但在尝试了多种解决方案后,我无法让它正常工作。问题是我无法将数据正确导出为 csv 格式。在我添加我的 ob_end_clean 之前,它会导出到带有 html 的 csv,现在它没有给我一个 csv,只有文本。
这是我在所需文件中的代码。
if (isset($_POST["hidden"])) {
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('php://output','w');
foreach ($list as $row) {
ob_end_clean();
fputcsv($fp, $row);
}
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
}
现在,当我进行导出时,数据会像 var_dump() 一样放回到屏幕上。我只是想让它转到一个 csv 文件,而不用 html 覆盖它。
最佳答案
成功了!
我在页面上的任何内容之前调用了我的 csv 代码。 :) 然后我连接到我的表,然后为我的代码做我的逻辑。我的主文件上没有 ob_start 或 ob_flush,这有很大的不同。我在 while 循环之前有 ob_clean,然后在声明 header 之后执行了 exit()。希望这能很好地解释它。
这是我的代码。
if (isset($_POST["hidden"])) {
$sql = "SELECT * FROM `newsletter`";
$result = mysql_query($sql);
ob_end_clean();
$fp = fopen('php://output','w');
while ($list = mysql_fetch_assoc($result)) {
fputcsv($fp, $list);
}
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
exit();
}
关于php - 我的 csv 导出显示 html,如何摆脱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316293/