为什么CSV顶部有一行空白


why a blank line at the top of the CSV?

我用PHP构建的CSV报告出现问题,并迫使浏览器下载。问题是PHP在输出的最开始插入了一个换行符"''n"(0x0A),所以当我打开文件时,我会在内容的顶部看到一个不需要的:)空行。有趣的是,这不会发生在我的本地环境中,只发生在开发服务器上。

这是我部署到开发服务器上测试PHP脚本的一个示例:

<?php
$doc = array(
   array(
        "header1",
        "header2",
        "header3"
   ),
   array(
        "value11",
        "value12",
        "value13"
   ),
   array(
        "value21",
        "value22",
        "value23"
   ),
   array(
        "value31",
        "value32",
        "value43"
   )
);
ob_start();
$df = fopen( "php://output", 'w' );
foreach ( $doc as $docLine )
{
    fputcsv( $df, $docLine );
}
fclose( $df );
$output = ob_get_clean();
$now = gmdate( "D, d M Y H:i:s" );
header( "Expires: Tue, 012 Jan 1970 00:00:00 GMT" );
header( "Cache-Control: max-age=0, no-cache, must-revalidate" );
header( "Last-Modified: {$now} GMT" );
// force download
header( "Content-Type: text/csv; charset=utf-8" );
header( "Content-Disposition: attachment; filename='"report.csv'"");
header( "Content-Transfer-Encoding: binary" );
echo $output;

开发服务器是Ubuntu 14.04.3 LTS使用Apache/2.4.7(Ubuntu)PHP 5.5.9-1ubuntu4.14(cli)

谢谢。

感谢马泰,格拉西亚斯·阿尔瓦罗。:)

这个问题实际上是在PHP网站的一个包含文件之后的一个尾随'n。当PHP.ini没有添加任何include文件夹的规则时,不确定为什么这会影响没有include的PHP脚本。

在这里的评论之后,Apache或PHP生成了换行符,我通过创建一个纯html的简单页面扩展来检查Apache与这个问题无关;)。

总之,当PHP代码是页面/脚本中的最后一个代码时,我建议不要关闭<?php标记。