我目前正在为通过webapp生成的报告测试一个新的CSV导出功能。相关的代码看起来如此:
$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时,我的浏览器不会显示“文件打开/保存”对话框,原始报告内容会显示在网页上。
我已经用Firefox的'Live HTTP Headers'插件检查了HTTP标头,发现对于较大的数据集,标头设置不正确并显示为'text / html; charset = utf-8'而不是'application / vnd.ms-excel'。非常奇怪。