0

動的に生成されたcsvファイルを提供しようとしています。何らかの理由でファイルを取得すると、データの前に18の空の行があります。定義したヘッダーと送信するcsvデータの間にスペースがありません。サーバー上のファイルにデータを書き込むと、これらの空の行は取得されません。ただし、ファイルを書き込んでからユーザーに提供しようとすると、空の行が返されます。だから、おそらく私はヘッダーを台無しにしたのか、それとも私が考えていない別の問題があるのだろうかと思っています:

function generate_csv($source_type, $include_unpublished = FALSE) {

   // retrieve data from DB
   ....

   // start up headers
   $csv_name = "$source_type-$data_set-csv_" . date('Y-m-d') . '.csv';
   header('Content-Type: text/x-comma-separated-values');
   header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
   header('Cache-Control: private', false); // required for certain browser
   header('Content-Disposition: attachment; filename="' . $csv_name . '"'); 

   // send csv data
   print $csv_data;

} //end function

免責事項: https : //drupal.stackexchange.com/questions/27649/extra-empty-rows-when-serving-csv-fileでこの質問をしましたが、drupal固有ではないようで、ありませんでした。あそこにたくさんのアイデアが浮かびます。

4

2 に答える 2

6

おそらく、この行は出力バッファで「ハング」し、以前に開始された可能性があります。このようにして、古き良き「ヘッダーは既に送信されました」というエラーなしでヘッダーを設定できますが、このコンテンツは、とにかくバッファーをフラッシュするときにブラウザーに送信されます。

試す

ob_clean();
print $csv_data;

http://php.net/ob-clean

于 2012-04-06T20:06:55.427 に答える
2

含めているファイルに問題があるはずです。?>php終了タグがブラウザに送信された後のすべての空白。複数の改行。

最善の解決策は、すべてのphpファイルでこの終了タグを取り除くことです。

他のオプションは、それらから不要な新しい行だけを削除するか、ファイルを提供する前に出力をbuferして無視することです。

于 2012-04-06T19:43:49.133 に答える