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); } 

Поскольку вы записываете данные в файл php://output , я предполагаю, что вы предлагаете файл для загрузки?

Ну, дополнительные новые строки в файле поступают из вашего скрипта, вы уже вывели их.

Самый распространенный виновник здесь – это пробел перед открывающим <?php в вашем скрипте:

Неправильно:




 <? PHP
   // Ваш код здесь

Правильно:

 <? PHP
   // Ваш код здесь

EDIT Благодаря @SDC, чтобы напомнить мне, что это также относится к любым файлам, которые вы включили. Для этих файлов вам также необходимо убедиться, что после закрывающего ?> Тега нет конечного пробела или желательно полностью закрыть закрывающий тег, так как нет необходимости, чтобы скрипт работал правильно.

Я знаю, что это было отмечено как ответ, но когда я столкнулся с подобной проблемой, у меня было много включений, поэтому я добавил ob_clean; чтобы очистить буфер, и он решил проблему пространства. Пример:

public function outputCSV () {

$ 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); 

}