我目前正在爲通過webapp生成的報告測試一個新的CSV導出功能。相關的代碼看起來如此:可以傳遞給特殊輸出流php://輸出的數據量是否有限制?
$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'。非常奇怪。
感謝您的建議費米,但正如你指出,將它融入我目前的解決方案將是相當混亂。不知道如何刷新緩衝區可以解決標題神祕地恢復爲'文本/ HTML'的問題。 FWIW雖然我以前嘗試過但沒有成功。 – freakwincy 2012-04-19 14:56:19