私は現在、Webアプリケーションを介して生成されたレポートのCSV機能への新しいエクスポートをテストしています。関連するコードはこのようになります。特別な出力ストリームphp:// outputに渡すことができるデータの量には制限がありますか?
$my_report_data = ReportDAO::runCampaignAnalysis($campaign_id, $start_date, $end_date);
$this->getResponse()->clearHttpHeaders();
$this->getResponse()->setHttpHeader('Content-Type', 'application/vnd.ms-excel');
$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename='export.csv');
$outstream = fopen("php://output", "w");
function __outputCSV(&$vals, $key, $filehandler) {
$retval = fputcsv($filehandler, $tempArray);
if($retval == FALSE) {
error_log('Uh oh, spaghetti o!');
error_log('The current line being processed is: ' . join('|', $vals));
}
}
array_walk($my_report_data, "__outputCSV", $outstream);
fclose($outstream);
return sfView::HEADER_ONLY;
$ my_report_data単にフォームseen hereの多次元配列です。
このコードは小さなデータセットで完全に機能します。 100行以下(カットオフが残念ながらどこにあるかはわかりません)。より大きなデータセットを使用する。ただし、CSVにエクスポートしようとするとブラウザで[ファイルを開く/保存]ダイアログが表示されるのではなく、Webページに未処理のレポートの内容が表示されます。
Firefox用の「ライブHTTPヘッダー」プラグインでHTTPヘッダーを調べましたが、大きなデータセットではヘッダーが正しく設定されず、「text/html」と表示されます。 charset = utf-8 'ではなく' application/vnd.ms-excel 'となります。非常に奇妙な。
あなたの提案をありがとうFemiしかし、私の現在のソリューションにそれを適合させることはむしろ面倒だと指摘しました。バッファをフラッシュすることで、ヘッダーの問題が「text/html」に変わってしまうという不思議な問題を解決する方法は不明です。 FWIWでは、私はそれを早期に成功させました。 – freakwincy