我在浏览器中输出了输出,而我需要将其下载为CSV文件。 以下是我的代码
$output = "";
$table = ""; // Enter Your Table Name
$sql = mysql_query("select * from $table");
$columns_total = mysql_num_fields($sql);
while ($row = mysql_fetch_array($sql)) {
for ($i = 1; $i < $columns_total-1; $i++) {
$output .='"'.$row["$i"].'",';
}
$output .="\n";
}
//下载文件
$filename = "myFile.csv";
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
echo $output;
exit;
答案 0 :(得分:1)
为什么要手动生成CSV文件?有一个内置的功能; fputcsv
<?php
// generate csv
$table = 'my_table';
$output_file = 'file.csv';
$delimiter = ',';
$enclosure = '"';
$h = fopen($output_file, 'w');
$sql = mysql_query("select * from $table");
while ($row = mysql_fetch_assoc($sql)) {
fputcsv($h, $row, $delimiter, $enclosure);
}
fclose($h);
// force download csv
header("Content-type: application/force-download");
header('Content-Disposition: inline; filename="'. $output_file .'"');
header("Content-Transfer-Encoding: Binary");
header("Content-length: ". filesize($output_file));
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="'. $output_file .'"');
?>
P.S。如果您需要将csv中的表列作为标题,则可以在生成csv文件时执行此操作:
// generate csv
$table = 'my_table';
$output_file = 'file.csv';
$delimiter = ',';
$enclosure = '"';
$h = fopen($output_file, 'w');
$sql = mysql_query("select * from $table");
$header_written = false;
while ($row = mysql_fetch_assoc($sql))
{
if (!$header_written) {
fputcsv($h, array_keys($row), $delimiter, $enclosure);
$header_written = true;
}
fputcsv($h, $row, $delimiter, $enclosure);
}
fclose($h);
答案 1 :(得分:0)
使用此功能
function force_download($file)
{
$dir = ""; // directory path if any
if ((isset($file))&&(file_exists($dir.$file)))
{
header("Content-type: application/force-download");
header('Content-Disposition: inline; filename="' . $dir.$file . '"');
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($dir.$file));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file . '"');
readfile("$dir$file");
}
}//end function
$filename = "myFile.csv";
force_download($filename);
答案 2 :(得分:-1)
我也有这个问题,不管我使用的“标题”是什么组合。
我的解决方案是因为我的“download.php”文件中有一些HTML。 我想如果浏览器检测到任何HTML,它将在浏览器中显示数据,而不是初始化下载。
删除“download.php”文件中的所有HTML,只留下PHP ---它应该有效。