CI 묻고 답하기

제목 대용량 엑셀파일 다운 (PHPExcel)
글쓴이 펌프킨헤드 작성시각 2015/07/06 18:29:18
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 21235   RSS
안녕하세요.
초보 개발자 입니다.

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');