一、PHPExcel 問題
Yii2.0 自帶PHPExcel模塊,其導出excel簡單方便,但是導出數據量大的時候容易超時、內存使用超出限制。
以前都是將PHP內存使用限制不斷增大,超時時間不斷增大來應對,但即使如此,web端導出時,瀏覽器依然會超時。
考慮了Jquery+Ajax+table導出,數據量依然會使瀏覽器卡死,經嘗試可以用以下方法,配合數據庫遊標,速度將大幅提升:
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0');
// 打開PHP文件句柄,php://output 表示直接輸出到瀏覽器
$fp = fopen('php://output', 'a');
// 將數據通過fputcsv寫到文件句柄
fputcsv($fp, $header);
foreach($query->batch(1000) as $models){
$arr=$models->toArray();
foreach($arr as $row){
fputcsv($fp, $row);
}
ob_flush();
flush();
}