这段代码导出sql数据到csv文件,数据是出来了,显示在网页上,不保存成csv文件,请教一下什么原因?
if (isset($_POST['export'])) {
$sql = 'SELECT col1, col2, col3 FROM `sheet1`';
$result = $conn->query($sql);
if ($result === FALSE) {
echo "<p>Error fetching data: " . $conn->error . "</p>";
} elseif ($result->num_rows > 0) {
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
// output the column headings
fputcsv($output, ['col1', 'col2', 'col3']);
// loop over the rows, outputting them
while ($row = $result->fetch_assoc())
fputcsv($output, $row);
// Output CSV-specific headers
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
fclose($output);
exit;
} else {
echo "0 results";
}
$conn->close();
}
确保在 PHP 代码中没有在 header() 函数调用之前输出了任何内容,包括空格、换行符、HTML 标签等。header() 函数需要在任何输出之前调用。
可以尝试使用 ob_clean() 函数清除输出缓冲区,以确保在输出 CSV 数据之前没有任何其他输出被发送到浏览器。