Я использую 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);
}