php将数据导出csv下载到本地,为什么出现4个空行?

新手上路,请多包涵

问题描述

通过字符串拼接方式(str左右都没有空格)header头下载文件,打开后发现这个样子。内容从第5行开始
图片描述

问题出现的环境背景及自己尝试过哪些方法

php语言,使用过fputcsv是没有问题的。但是特别想知道为什么会出现这种情况

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

 function test(){
    $this->createcsv('test.csv', [[1],[1]]);
}
function createcsv($fileName,$csv_body)
{
    // 头部标题
    $csv_header = array('sku');
    $header = implode(',', $csv_header) . PHP_EOL;
    $content = '';
    foreach ($csv_body as $k => $v) {
        $content .= implode(',', $v) . PHP_EOL;
    }
    $csvData = trim($header.$content);
    header("Content-type:text/csv;");
    header("Content-Disposition:attachment;filename=" . $fileName);
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');
    echo $csvData;exit;
}

你期待的结果是什么?实际看到的错误信息又是什么?

期待内容从第一行开始,实际是从5行开始
阅读 2.8k
3 个回答

换个php版本试试。我现在是7.0.13 win32 没有这个问题。另外,看看web服务器是不是会增加一些东西进去

你试试以下两个办法:
1、文件保存为utf8 无BOM
2、把所有php文件的结束符去掉。就是 <?php ?> 去掉结束符 为 <?php

另外,我本地试了下代码是正常的,应该跟你目前的代码无关

clipboard.png

也出现过这问题,本地代码单独测试没问题,放到程序中就空4行,程序运行中可能在header之前已经输出了某些数据,所以清除一下缓存区可以解决ob_clean()。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题