fputCSV奇怪的行为

RSM*_*RSM 0 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);
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*dom 5

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

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

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

错误:




<?php
  // Your code here

对:

<?php
  // Your code here

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

  • @RyanMurphy听起来你仍然有一些新行在那里泄漏它,检查*all*你的PHP脚本是为这个问题制作文件所需的(每个文件都是`include` /`require`d).还要确保在`?> <?php`之间的文件中没有任何空白(最好完全从文件中删除每个`?>`).另外,还要确保你没有可能在你的脚本这点之前,输出什么`echo`,`print`等任何电话. (2认同)

小智 5

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

public function outputCSV(){

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

//add here  
ob_clean;
Run Code Online (Sandbox Code Playgroud)
   $fp = fopen('php://output', 'w');

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

   fclose($fp);
Run Code Online (Sandbox Code Playgroud)

}