fputCSV奇怪的行为

时间:2012-08-15 16:04:20

标签: php fputcsv

我正在使用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);
    }

2 个答案:

答案 0 :(得分:5)

因为您要将数据写入php://output,我假设您提供要下载的文件?

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

这里最常见的罪魁祸首是在脚本中打开<?php标记之前引出空格:

错:




<?php
  // Your code here

右:

<?php
  // Your code here

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

答案 1 :(得分:5)

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

  

public function outputCSV(){

     

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

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

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

   fclose($fp);
     

}