제목 | 대용량 엑셀파일 다운 (PHPExcel) | ||
---|---|---|---|
글쓴이 | 펌프킨헤드 | 작성시각 | 2015/07/06 18:29:18 |
|
|||
안녕하세요. 초보 개발자 입니다. PHPExcel을 사용하여 6만건 정도의 데이터를 조회하여 엑셀 파일로 다운로드 하려 하니 뻑이 나네요. (페이지 로딩 돌다가 빈화면 뜸...) 메모리 문제인것 같습니다만 해결 방법이 없을까요? array_chunk로 6만건 데이터를 5천개 단위로 나눠 배열에 저장한 후 foreach를 돌면서 setCellValueByColumnAndRow로 그려주는데 2만건 이상 넘어가면 뻗네요. 1만건씩 파일을 따로 다운 받으면 괜찮아 질까 싶어서 해보려 했는데 실력이 딸려서 구현 못했습니다.ㅜㅜ 고수님들 도움좀 부탁드립니다. 소스 첨부합니다. ========================================= $tradeData = $this->db->get()->result(); $tradeData = array_chunk($tradeData, 5000); $fields = $this->db->list_fields("TradeTransaction"); $this->makeExcelFile($tradeData, $fields, $userID, "TradeTransaction"); } public function makeExcelFile( array $data = null, array $fields = null, $userID, $fileName ) { $this->load->library( "PHPExcel" ); $objPHPExcel = new PHPExcel(); $sheetIdx = 0; foreach ( $data as $key => $value) { if ( $sheetIdx >= 1 ) { $objPHPExcel->createSheet(); } $objPHPExcel->setActiveSheetIndex($sheetIdx); $fieldIdx = 0; foreach ( $fields as $field ) { $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($fieldIdx, 1, $field); $valIdx = 2; foreach ( $value as $k => $v ) { $val = $v->$field; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($fieldIdx, $valIdx, $val); $valIdx++; } $fieldIdx++; } $objPHPExcel->getActiveSheet()->setTitle("sheet_".$sheetIdx); $sheetIdx++; } header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$userID.'_'.$fileName.'.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); |
|||
다음글 | 파일업로드 질문이요~ (3) | ||
이전글 | 파일 업로드 질문입니다. (3) | ||
최용운
/
2015/07/06 21:57:04 /
추천
0
|
ini_set('memory_limit', '1024M');