fputcsv在.csv文件开头插入空行

4
<?php

$filename="backup_".date('m/d/Y', time()).".csv";

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');

$q=mysqli_query($conn,"SELECT * FROM visitordb");
$file = fopen('php://output','w');
if(mysqli_num_rows($q)>0) {
    while($res = $q->fetch_assoc()) {
        $datas = $res["sno"].','.$res["UDID"].','.$res["taggnumber"].','.$res["name"].','.$res["designation"].','.$res["company"].','.$res["email"];
        fputcsv($file, explode(',', $datas));
    }
} else {

}

fclose($file);
}

上述代码在 MS Excel 中查看 .csv 文件时,在开头生成空行。另外,.csv 文件还会生成页面中的任何 HTML 代码。

确保脚本中没有其他输出,在关闭$file后退出。 - Mark Baker
不要依赖Excel告诉你CSV文件的样子。那个.csv文件看起来像什么?! - deceze
尝试将文件简单保存到磁盘,并查看开头是否有空行。 - Viktor S.
另外,您能否解释一下您问题中的最后一句话?关于HTML的那个。 - Viktor S.
谢谢大家。是的,我已经尝试了建议,但还是没有改变。CSV 文件开头有一行空白。HTML 是 <html> 标记等等。 - warelord
所以,你是说你已经尝试过 $file = fopen('test.csv','w'); ...,但服务器上的文件仍然有空行?你是否检查过数据库中是否有空行? - Viktor S.
1个回答

6

如果您删除标题指令会发生什么? 您必须知道,标题通常以换行符结束。 我可以想象这可能是 \n vs \r\n 的冲突。

如果一切都失败了,请将整个输出放入缓冲区,稍后将其修剪:

ob_start();
...your code...
$out = ob_get_contents();
ob_end_clean();
echo trim($out);

Best regards

Zsolt


不用谢。请注意,trim函数也会删除尾随空格。如果您需要保持CSV文件的100%安全,请使用其他字符串操作。 - Zsolt Szilagyi
@Zsolt Szilagy,非常感谢。我也遇到了同样的问题,不知道头部指令会添加一个新行。在我的情况下,我将输出写入临时文件(php的tmpfile()),所以我只需要在循环遍历我的文件并echo它之前执行ob_end_clean()。 - BryanT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接