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