Экспорт файла CSV имеет много пустых строк

Я делаю приложение CakePHP 1.3 с MSSQL Server 2012. Я успешно сделал экспорт CSV-файла из базы данных.

В первый раз я сделал это без проблем. Я продолжаю делать некоторые другие функции в моем приложении. А потом я снова пытаюсь протестировать функцию экспорта.

И проблема возникла. Проблема в моем файле CSV, в нем появилось много пустых строк. Я проверил в своей базе данных, она не имеет нулевых значений, а также в моем контроллере и export.ctp.

Я не знаю, почему возникла проблема, поэтому кто-то может понять мою ложь?

Мой контроллер:

function csv_export() {
$this->set('title_for_layout','Export Words List');
Configure::write('debug',0);
$this->layout=false;
$filename = 'Wordlist_'.date('YmdHis');
$th=array('id','avoidance_word','avoidance_word_yomi','replace_word','replace_word_yomi','creator','create_time','updator','update_time','invalid_flg');
$Th_name=array('ID','Avoidance Words','Avoidance Words Yomi','Replace Word','Replace Word Yomi','Creator','Create Time','Updator','Update Time','Invalid Flag');
$td=$this->MAvoidanceWord->find('all', array('fields'=>$th));
$this->set(compact('filename','Th_name','td'));
}

Мой взгляд:

<?php
$csv->addRow($Th_name);
foreach ($td as $t){
$csv->addRow();
$csv->addField($t['MAvoidanceWord']['id']);
$csv->addField($t['MAvoidanceWord']['avoidance_word']);
$csv->addField($t['MAvoidanceWord']['avoidance_word_yomi']);
$csv->addField($t['MAvoidanceWord']['replace_word']);
$csv->addField($t['MAvoidanceWord']['replace_word_yomi']);
$csv->addField($t['MAvoidanceWord']['creator']);
$csv->addField($t['MAvoidanceWord']['create_time']);
$csv->addField($t['MAvoidanceWord']['updator']);
$csv->addField($t['MAvoidanceWord']['update_time']);
$csv->addField($t['MAvoidanceWord']['invalid_flg']);
$csv->endRow();}
$csv->setFilename($filename);
echo $csv->render(true,'UTF-8');
?>

И мой файл CSV:

введите описание изображения здесь

Обновление: мой CSV-файл открыт с помощью Notepad ++

введите описание изображения здесь

0

Решение

Может быть, проблема не в этом коде.
Проверьте дважды, чтобы у вас не было ни одного перевода строки.
Может быть что-нибудь вроде:

  <?php
//php code
?>
↓
↓
↓

Весь контент за пределами вашего <?php ?> блок является тихим эквивалентом эха «…»;
Итак, эти переводы строки печатаются как echo «\ n \ n \ n \ n»;

Хорошей практикой является удаление последнего ?> совсем

0

Другие решения

Удалить addRow изнутри foreach:

foreach ($td as $t){
// $csv->addRow();
$csv->addField($t['MAvoidanceWord']['id']);
...

Вы можете использовать addRow(array) или же addField (несколько раз) и endRow
The fact that you have
addRow` прямо сейчас означает, что он добавляет пустую строку несколько раз.

Второй способ: Попробуйте добавить ob_clean(); до $csv->addRow($Th_name);

0