0

我正在使用 fputcsv 创建一个 csv,但是当我在 excel 中打开它时,它输出的数据从第三行开始。为什么是这样?

我想使用 fputcsv 创建一行列标题,最好的方法是什么?

public function indexAction()
    {
        $this->outputCSV();
        //$this->view->navigation = $navigation = Engine_Api::_()->getApi('menus', 'core')->getNavigation('passport_admin_main', array(), 'passport_admin_main_outofarea');
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        header('Content-Disposition: attachment; filename="OutOfAreaReport.csv"');
        header('Content-type: application/excel');
        readfile('OutOfAreaReport.csv');
    }

    public function outputCSV(){
        $list = array (
                array('aaa', 'saasasbbb', 'ccdddc', 'dddd')
                );
        $fp = fopen('php://output', 'w');

        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }

        fclose($fp);
    }
4

2 回答 2

5

因为您正在将数据写入php://output,所以我假设您正在提供文件以供下载?

好吧,文件中额外的新行来自您的脚本,您已经输出了它们。

<?php这里最常见的罪魁祸首是脚本中开始标记之前的空白:

错误的:



<?php
  // 你的代码在这里

对:

<?php
  // 你的代码在这里

编辑感谢@SDC 提醒我这也适用于您包含的任何文件。对于这些文件,您还需要确保结束?>标记后没有尾随空格,或者最好完全删除结束标记,因为脚本不需要正常工作。

于 2012-08-15T16:15:34.100 回答
5

我知道这已被标记为已回答,但是当我遇到类似的问题时,我有很多包含,所以我添加了 ob_clean; 清除缓冲区并解决空间问题。例子:

公共函数输出CSV(){

$list = array (array('aaa', 'saasasbbb', 'ccdddc', 'dddd') );

//add here  
ob_clean;
   $fp = fopen('php://output', 'w');

   foreach ($list as $fields) {
       fputcsv($fp, $fields);
   }

   fclose($fp);

}

于 2014-07-17T18:56:45.437 回答