【问题标题】:why a blank line at the top of the CSV?为什么 CSV 顶部有一个空行?
【发布时间】:2016-04-08 00:34:32
【问题描述】:

我在使用 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开始标签&lt;?php前有空行吗?
  • 提示:注释掉输出缓冲区代码以强制发出警告。希望它会告诉你确切的文件和行。

标签: php export-to-csv


【解决方案1】:

感谢 Matei,Gracias a Álvaro。 :)

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

跟随 cmets Apache or PHP generating prepending line feed character 我通过创建纯 html 简单页面 .html 扩展名检查了 apache 与此问题无关;)。

总而言之,当 PHP 代码位于页面/脚本的最后一个位置时,我建议不要关闭 &lt;?php 标记。

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 2020-01-16
    • 1970-01-01
    • 2012-02-20
    • 2016-06-05
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多