PHP导出CSV文件开头空白行问题:如何删除fwrite写入的首行空行?
解决CSV文件开头空白行的问题
核心原因及修复方案
1. 移除PHP文件的BOM头
很多编辑器默认会给UTF-8文件添加BOM头(三个隐藏字符),这会直接导致输出开头出现空白行。
- 用VS Code、Notepad++等编辑器打开你的PHP文件,将编码改为UTF-8无BOM后重新保存。
2. 确保header前无任何输出
header()必须在所有输出(包括空格、换行、HTML标签,甚至<?php标签前的空白)之前调用:
- 检查文件最开头的
<?php标签,确保它是文件的第一个字符,前面没有任何空格或换行。 - 排查代码中是否有
echo、print、var_dump这类输出语句出现在header()之前。
3. 强制清空输出缓冲区
如果之前有未处理的输出缓冲区残留内容,也会生成空白行。在发送header前添加以下代码:
ob_clean(); flush();
4. 优化字符串换行的写法
避免硬编码换行符,改用PHP内置的PHP_EOL,同时确保每行结尾都有正确的换行:
$kata_header = "REKENING;NOMINAL;EMAIL" . PHP_EOL; $kata_header .= "tes" . PHP_EOL;
修复后的完整代码示例
<?php // 先清空缓冲区,避免残留输出 ob_clean(); flush(); $name_file = 'ekspor-kag-bri-' . date('Ym', strtotime($data_pendukung['tgl_trf'])) . '.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="' . $name_file . '"'); $kata_header = "REKENING;NOMINAL;EMAIL" . PHP_EOL; $kata_header .= "tes" . PHP_EOL; $arr_isi_cell = []; foreach ($dt_gaji as $row) { $isi_cell = str_replace("-","",$row->norekening) . ';' . floatval($row->total_gaji) . ';' . 'inayohanes@gmail.com' . PHP_EOL; array_push($arr_isi_cell,$isi_cell); } $myfile = fopen("php://output", "wb"); fwrite($myfile,$kata_header); foreach($arr_isi_cell as $line){ fwrite($myfile,$line); } fclose($myfile); exit; // 终止脚本,防止后续代码产生输出
内容的提问来源于stack exchange,提问作者Helmi Setya
相关产品推荐
相关产品推荐

